Nginx入门
一、概述
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。很多时候,我们用它做负载均衡。
二、安装Nginx
1、下载、解压Nginx:tar -zxvf nginx-1.6.2.tar.gz
2、下载依赖包:yum install pcre、yum install pcre-devel、yum install zlib、yum install zlib-devel
3、进入解压目录,并且进行configure配置:cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx
4、编译安装:make && make install
5、启动Nginx:/usr/local/nginx/sbin/nginx(关闭用-s stop、重启 -s reload),默认端口80
6、访问nginx,输入linux的ip(http://192.168.137.209)即可,因为默认端口80
注:我安装后,刚开始的时候发现不能访问nginx,经查,80端口不能访问(telnet 192.168.137.209 80),需要开启linux的80端口:/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
三、Nginx配置简要说明
1、Nginx配置文件nginx.conf位于/usr/local/nginx/conf目录下,主要配置如下
2、配置中server叫做虚拟主机配置
server { listen 80; #端口号 server_name localhost; #虚拟主机名,可配合hosts使用 #charset koi8-r; #字节编码 #access_log logs/host.access.log main; #成功日志配置,main为输出格式 location / { #localtion后面跟的是正则表达式用于配置访问路径 root html; #根目录,位于安装目录下 index index.html index.htm; #访问首页面 } #error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
可以看到server可以配置多个location,然后根据后面的匹配的路径,就可以实现静态页面的分离,比如我输入http://192.168.186.132/50x.html,访问的界面如下(location后面的等于表示绝对路径)
3、多个虚拟主机配置
在nginx.conf中可以配置多个虚拟主机server(都在http节点里面配置),根据端口号的不同,访问不同的信息,比如在配置中添加一个虚拟主机,端口号为81
server { listen 81; server_name service2; location / { root html; index service2.html; } }
其中service2.html是在/usr/local/nginx/html/目录下自己创建的,内容为“hello service2”。
重启Nginx:/usr/local/nginx/sbin/nginx -s reload
这时访问http://192.168.137.209:81/,即可看到“hello service2”(注意linux要开启81端口)
四、Nginx反向代理
Nginx配置文件里,提供了proxy_pass配置项用于反向代理。该配置项将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或IP地址加端口的形式
具体配置如下:
server { listen 80; server_name localhost; location / { proxy_pass url; (url是要代理的地址) } }
例子:我的另一个服务器192.168.137.79启动tomcat,通过代理访问该tomcat
1、修改配置:vim /usr/local/nginx/conf/nginx.conf修改虚拟主机81端口
server { listen 81; server_name service2; location / { proxy_pass http://192.168.137.79:8080/; # proxy_pass http://www.baidu.com; } }
2、重启nginx:/usr/local/nginx/sbin/nginx -s reload
3、访问:http://192.168.137.209:81 会自动跳转到192.168.137.79的tomcat首页
注意:反向代理后获取客户端IP地址为nginx服务器地址,如果想要获取真实IP地址,需要配置proxy_set_header X-real-ip $remote_addr
五、负载均衡
Nginx通过配置upstream进行负载均衡(该配置与虚拟主机同级),主要配置如下
upstream myUpstream{ server 192.168.137.79:8080 weight=1 max_fails=3 fail_timeout=30s; }
server:表示访问的ip或域名
weight:表示访问的权重,默认1
max_fails:表示多少次返回失败后就认为该配置失效
fail_timeout:表示多少秒没返回就认为失败
例子,开启两个tomcat,通过配置,实现调用http://192.168.137.209:81/时轮询访问两个tomcat的nginxTest.html
1、在tomcat的webapps/root目录下添加nginxTest.html文件,里面的内容分别是nginxTest1和nginxTest2
2、配置upstream
upstream myUpstream{ server 192.168.137.79:8080 weight=1 max_fails=3 fail_timeout=30s; server 192.168.137.79:8081 weight=1 max_fails=3 fail_timeout=30s; }
3、修改虚拟主机proxy_pass
server { listen 81; server_name service; location /nginxTest.jsp { proxy_pass http://myUpstream; } }
4、重启nginx,访问http://192.168.137.209:81/,这是就可以看到界面轮询显示nginxTest1和nginxTest2
六、自定义Nginx日志
在nginx配置中,可以看到两条被注释了的语句
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
第一条语句是配置日志的格式,第二条语句是表示成功后写日志的位置和格式。此时将第一条语句的注释去掉,在虚拟主机添加第二条语句修改日志名为nginxSuccess.log,即可配置日志
server { listen 81; server_name service; location / { proxy_pass http://myUpstream; } access_log logs/nginxSuccess.log main; }
重启服务,可以在nginx目录下的logs文件下看到nginxSuccess.log(如果没能自动生成,需自己新建),打开日志tail -f nginxSuccess.log,每次访问,都会看到多一条日志。
Done!