The current document is available in English. Click to switch to English
前言
- 正向代理:用户通过代理服务器直接访问 Internet,叫做正向代理。
- 反向代理:用户将请求发送给代理服务器,代理服务器根据请求将请求转发到 Internet 中,得到请求后再返回给用户。
- 负载均衡:通过反向代理服务器将请求分发到多个服务器中。
Nginx 常用命令
nginx -v
nginx -s stop
nginx
nginx -s reload
nginx -t
|
Nginx 配置文件
nginx 配置文件由三部分组成
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行配置指令
work_processes auto;
user www www;
|
第二部分:events 块
影响 nginx 服务器与用户网络的连接数
events { worker_connections 65535; }
|
第三部分:http块(包括server块和全局块)
包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server_tokens off; client_max_body_size 50m; gzip on; gzip_min_length 8000; gzip_comp_level 3; gzip_buffers 4 8k; gzip_types text/plain text/css application/xml image/png image/gif image/jpeg image/jpg font/ttf font/otf image/svg+xml application/x-javascript; gzip_disable "MSIE [1-6]\."; log_format json '{"@timestamp": "$time_iso8601",' '"server_ip": "$server_addr",' '"client_ip": "$remote_addr",' '"server_name": "$server_name:$server_port",' '"method": "$request_method",' '"request": "$request_uri",' '"url": "$uri",' '"query": "$args",' '"status": "$status",' '"user_agent": "$http_user_agent",' '"referer": "$http_referer",' '"response_time": "$upstream_response_time",' '"x_forwarded_for": "$http_x_forwarded_for",' '"send_bytes": "$bytes_sent"}'; server { ......... } }
|
第四部分:server块
设置不同代理服务配置
server { listen 80; server_name [域名]; location / { root html; index.html index.htm; } }
|
Nginx反向代理
代理示例配置
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1:8080; index index.html index.htm; } }
|
server { listen 80; server_name 127.0.0.1; location ~ /login/ { proxy_pass http://127.0.0.1:8080; } location ~ /regist/ { proxy_pass http://127.0.0.1:8081; } }
|
代理配置解析
proxy_pass [代理名称];
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Port 443; proxy_set_header X-Server-Name [域名]; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_connect_timeout 90
proxy_send_timeout 90;
proxy_read_timeout 86400;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_path /data/temp;
proxy_max_temp_file_size 0; proxy_temp_file_write_size 64k;
|
负载均衡
负载均衡配置示例
upstream myserver{ server [ip]:[port]; server [ip]:[port]; }
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://myserver; index index.html index.htm; } }
|
负载均衡策略
轮询(默认)
按时间顺序逐一分配到不同的后端服务器,后端服务器 down 的时候,能自动剔除
upstream myserver{ server [ip]:[port]; server [ip]:[port]; }
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://myserver; index index.html index.htm; } }
|
权重
weight,权重越高,分配越多
upstream myserver{ server [ip]:[port] weight=5; server [ip]:[port] weight=10; }
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://myserver; index index.html index.htm; } }
|
ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题
upstream myserver{ ip_hash; server [ip]:[port]; server [ip]:[port]; }
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://myserver; index index.html index.htm; } }
|
fair(不是内建负载均衡使用的轮换的均衡算法)
upstream myserver{ server [ip]:[port]; server [ip]:[port]; fair; }
server { listen 80; server_name 127.0.0.1; location / { root html; proxy_pass http://myserver; index index.html index.htm; } }
|