1.nginx反向代理
在讲诉具体的配置之前,先说下正向代理与反向代理的区别。
正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理,而且必须要进行一些特别的设置才能使用正向代理。。正向代理是一种最终用户知道并主动使用的代理方式。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理对用户来说是透明的,用户是感知不到的。
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
修改配置文件
/usr/local/nginx/conf/nginx.conf
user www www; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; include /usr/local/nginx/conf/vhosts/proxy.conf; sendfile on; keepalive_timeout 65; gzip on; client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户 client_body_buffer_size 256k; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时) proxy_send_timeout 300s; proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘 proxy_ignore_client_abort on; #不允许代理端主动关闭连接 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
编辑反向代理服务器配置文件:
/usr/local/nginx/conf/vhosts/proxy.conf
server { listen 80; server_name jerishi1.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.38:3000; } access_log logs/jerishi1.com_access.log; } server { listen 80; server_name jerishi2.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.40:80; } access_log logs/jerishi2.com_access.log; }
负载均衡设置
upstream monitor_server { server 192.168.0.1:80; server 192.168.0.2:80; } server { listen 80; server_name nagios.xxx123.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://monitor_server; } access_log logs/nagios.jerishi.com_access.log; }
2.ngnix重启
检查配置
$:/usr/local/nginx-1.5.1/sbin/nginx -t
重启nginx
$:/usr/local/nginx-1.5.1/sbin/nginx -s reload
关闭nginx
$:/usr/local/nginx-1.5.1/sbin/nginx -s stop
3.Location处理逻辑
location匹配命令
- ~ #波浪线表示执行一个正则匹配,区分大小写
- ~* #表示执行一个正则匹配,不区分大小写
- ^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
- = #进行普通字符精确匹配
- @ #”@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
代码示例:
location = / { # 只匹配"/". [ configuration A ] } location / { # 匹配任何请求,因为所有请求都是以"/"开始 # 但是更长字符匹配或者正则表达式匹配会优先匹配 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location [ configuration C ] } location ~* .(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg结尾的请求. # 但是所有 /images/ 目录的请求将由 [Configuration C]处理. [ configuration D ] }
匹配流程:
1. 用uri测试所有的prefix string;
2. Uri精确匹配到=定义的loacation,使用这个location,停止搜索;
3. 匹配最长prefix string,如果这个最长prefix string带有^~修饰符,使用这个location,停止搜索,否则:
4. 存储这个最长匹配;
5. 然后匹配正则表达;
6. 匹配到第一条正则表达式,使用这个location,停止搜索;
7. 没有匹配到正则表达式,使用#4步存储的prefix string的location。
4.nginx root&alias比较
root
语法:root path
默认值:root html
配置段:http、server、location、if
root会根据完整的URI请求来映射,也就是/path/uri.
示例:
location ~ ^/qcloud/ { root /data/release/www.qcloud.com; autoindex on; auth_basic "Restricted"; auth_basic_user_file passwd/weblogs; }
如果一个请求的URI是/qcloud/www.buy.qcloud.com/main.js时,web服务器将会返回/data/release/www.qcloud.com/qcloud/www.buy.qcloud.com/main.js的文件。
alias
语法:alias path
配置段:location
alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
示例:
location ~ ^/qcloud/ { alias /data/release/www.qcloud.com; autoindex on; auth_basic "Restricted"; auth_basic_user_file passwd/weblogs; }
如果一个请求的URI是/qcloud/www.buy.qcloud.com/user.js时,web服务器将会返回/data/release/www.qcloud.com/www.buy.qcloud.com/main.js的文件。