Nginx
基操
安装
注意一下需要一些依赖,
zlib
,
gcc-c++
,
pcre
,
openssl
;
依赖装好之后,去官网下一个tar.gz,搞个稳定版的;
解压一下,进入目录,执行
./configure
;
然后执行
make && make install
;
这时候你会发现
/usr/local
下面多了一个
nginx
的文件夹,就是它了;
基本操作
启动:进入nginx下的sbin,执行
./nginx
;
浏览器输入服务器ip地址,若出现nginx的页面就说明启动成功;
重新加载配置文件:
./nginx -s reload
关闭:
./nginx -s stop
;
查看版本号:
./nginx -v
;
配置文件总览
配置文件在nginx目录下的conf里面;
配置文件可分为以下三块:
-
全局块:从配置文件开始到events块开始,影响nginx整体运行的配置,例如
worker_processes 1;
设置了并发处理量为1; -
events块:影响用户与nginx服务器的网络连接,例如
worker_connections 1024;
设置了最大连接数为1024; -
http块
-
http全局块:http处理的一些全局配置,例如
keepalive_timeout 65;
设置了请求完成后还要连接多久; -
server块
-
server全局块:server全局配置,例如
listen 80;
配置了监听80端口; - location块:地址定向等功能;
-
server全局块:server全局配置,例如
-
http全局块:http处理的一些全局配置,例如
反向代理
对外不暴露应用服务器,而是通过nginx转发给应用服务器来做处理;
案例1:浏览器输入服务器ip,跳转到tomcat主页
虽然也可以通过修改tomcat的server.xml里面的端口为80来做到这一点(我之前就一直这么干),但感觉真的有点low。
这里tomcat的端口是默认的8080;
location / {
root html;
# 加上这行即可
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
案例2:代理多个tomcat,根据url的区别转发到不同tomcat
把原先的tomcat复制一份即可,改一下server.xml里面的server的port(监听tomcat关闭的那个,一般原来都是8005)和监听http的port(一般原来都是8080),先把两个tomcat启动起来;
在tomcat8080中创建test1文件夹,里面写个html,在tomcat8081里面做同样的操作,文件夹是test2;
我们希望路径中url中有test1的都去到tomcat8080中,url中有test2的都去到tomcat8081中;
只需在nginx.conf中做如下配置:
location ~ /test1/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /test2/ {
proxy_pass http://127.0.0.1:8081;
}
事实上如果我们需要更换nginx监听的端口,我们还可以在创建一个server,我这里图方便就直接放到原有的监听80端口的server里面了。
~
表示后面是区分大小写的正则表达式匹配;
~*
表示后面是不区分大小写的正则表达式匹配;
负载均衡
有时候一个tomcat扛不住压了,就可以搞很多个tomcat帮他分担压力,分担的工作量由nginx根据分配策略分配;
又比如我的一个tomcat挂了,如果我有多台tomcat的话,其他兄弟就能先顶一顶;
案例
例如我有两个tomcat,里面都有静态资源
test3/a.html
,其负载均衡在nginx中的配置如下:
# 在http全局块中配置一个负载均衡
upstream myserver {
server 202.205.24.212:8080;
server 202.205.24.212:8081;
}
# 在server块中配置
location / {
proxy_pass http://myserver;
}
注意这两个tomcat最好一模一样,不要出现一个可以访问某个url,另一个不行的情况,如果有这种情况,还要单独配置一个location(就像前面的例子一样配个有正则的location);
分配策略
-
默认:默认采用轮询,即按时间先后顺序一次分配;
upstream myserver { server 202.205.24.212:8080; server 202.205.24.212:8081; }
-
按权重分配:设置weight的值,weight值越大分配的比例越多;
upstream myserver { server 202.205.24.212:8080 weight=1; server 202.205.24.212:8081 weight=10; }
-
ip_hash方式:解决了session问题,一个用户始终访问一个tomcat;
upstream myserver { ip_hash; server 202.205.24.212:8080; server 202.205.24.212:8081; }
-
按响应时间来分配:谁响应的快就谁来(fair需要单独安装);
upstream myserver { fair; server 202.205.24.212:8080; server 202.205.24.212:8081; }
动静分离
静态资源就没必要放tomcat里了,直接用nginx访问就行了;
案例:访问static目录下的html里的html文件
location /html/ {
root /static/;
index index.html;
autoindex on;
}
这样浏览器就能直接访问了;
autoindex是指是否列出文档目录树,如果是图片的话就会列出来;
index指定初始页面;
root是指你授权访问的文件夹的父目录地址;
/html/是指你授权的目录名称;