前言
看了一些Nginx教程,做个记录。
概述
- Nginx是什么?
Nginx(engine x)是一款轻量级的Web服务器、反向代理服务器及电子邮件代理服务器。 - Nginx能够做些什么?
Nginx多用于通过反向代理实现负载均衡,它能够代为收发请求和响应:
1)Nginx可以针对客户机不同的请求进行代理到配置的站点,比如将html文件请求和对后端数据的请求进行代理区分开以实现前后端分离;
2)随着用户数量达到一个级别的时候一台服务器是肯定满足不了需求的,而这个时候就可以实现负载均衡使用多台服务器来满足用户的访问。 - 怎么使用Nginx?
Nginx的使用比较简单,常用命令只有几条。
nginx -s stop :快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit :平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload :因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen :重新打开日志文件。
nginx -c filename :为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t :不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -v:显示 nginx 的版本。
nginx -V:显示 nginx 的版本,编译器版本和配置参数。
Nginx的配置
Nginx最主要的还是它的配置文件,nginx.conf在Nginx安装目录的conf目录下,可以看到其中这么一些配置:
server {
listen 8800;//指定Nginx代理的端口
server_name 127.0.0.1;//指定IP或域名
client_max_body_size 64M;
proxy_connect_timeout 75s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root html;
index index.html index.htm;
}
location ~ ^(.*)\/\.svn\/ {
return 404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
...
}
这里指定127.0.0.1的8800端口进行监听,location则表示代理的规则,访问127.0.0.1:8800这里将代理到Nginx首页。
//符号/是通用匹配,所有请求都能匹配到
location / {
root html;//root配置代理到的位置
index index.html index.htm;//指定index页为index.html index.htm。
}
打开Nginx安装目录html文件夹,里面包含index.html,参照上面的配置,即访问127.0.0.1:8800就是代理到这个index.html。
语法规则: location [=|~|~*|^~] /uri/ { … }
即location到左大括号之间的式子(可以包含正则表达式)匹配请求进行代理。
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
location ~ \.(action)$ { //区分大小写匹配包含.action的请求
proxy_pass http://127.0.0.1:8082;
root D:/idea/AllProject/Test/src/main/webapp/;
}
root指向去哪个目录加载需要的文件。
proxy_pass指定代理的地址,如现在访问127.0.0.1:8800/test.action就相当于http://127.0.0.1:8082/test.action。
一般我们不直接在nginx.conf里面进行配置代理,而是为 Nginx 指定一个配置文件,来代替缺省的。
在nginx.conf添加:
#指定配置文件,来代替缺省的
include D:/Nginx/nginx1.12.1/vhosts/*.conf;
Nginx负载均衡
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;
#设定负载均衡的服务器列表
upstream load_balance_server {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.1.11:80 weight=5;
server 192.168.1.12:80 weight=1;
server 192.168.1.13:80 weight=6;
}
#HTTP服务器
server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问
server_name www.javastack.cn;
#对所有请求进行负载均衡请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.html index.htm; #定义首页索引文件的名称
proxy_pass http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表
#以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
}
}
}
\将匹配所有请求代理到http://load_balance_server,在http{…}中指定了load_balance_server的地址。
参考
写的不好,请再看看参考链接吧。
正向代理与反向代理:
正向代理与反向代理【总结】
location 配置详情参考:
nginx location配置详细解释
nginx 之 proxy_pass详解
超详细 Nginx 极简教程(强烈推荐):
超详细 Nginx 极简教程
Nginx中文文档:
Nginx中文文档