配置文件
upstream abc { server 192.168.2.188:8080 weight=1 max_fails=3 fail_timeout=30; 定义集群,weight=权重轮询,max_fails=请求失败次数,fail_timeout=失败超时时间 } server { listen 8000; server_name web1.abc.com; location / { proxy_read_timeout 300; #连接成功后,等候后端服务器响应时间(后端服务器处理请求的时间) proxy_connect_timeout; #后端服务器连接的超时时间 proxy_send_timeout; #后端服务器数据回传时间,在规定时间内后端服务器必须传完所有的数据 proxy_set_header Host $host; #代理服务器发送请求头部中加入host字段信息,用于后端多个虚拟主机。 proxy_set_header X-Real-IP $remote_addr; #远端真实ip,多级代理中正向代理记录真实ip,反向代理记录连接的客户端ip proxy_set_header X-Forwarded-For $remote_addr; #远端真实ip,多级代理会追加记录 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址 proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr"; #相当于上面的命令
proxy_next_upstream error timeout http_404 http_502 non_idemponent(请求方法POST,LOCK,PATCH); #访问错误,允许转发到其他服务器 } } server { listen 8000; server_name aaa.com access_log logs/aaa.access.log; #访问日志 error_log logs/aaa.error.log; #错误日志 location ^~ /.well-known { 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://www.weixin.com; }
location /tomcat { proxy_read_timeout 300; 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 abc; }
location /solr { proxy_read_timeout 300; proxy_pass abc
} server { listen 8000; server_name images.abc.com; access_log logs/image.access.log; error_log logs/image.error.log;
location / { 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_connect_timeout 150; proxy_send_timeout 100; proxy_read_timeout 100; proxy_buffers 4 32k; #缓冲区的数量和大小 client_max_body_size 1m; #上传文件最大值 client_body_buffer_size 64k; #请求体缓存区大小 root /home/tom/data/images/; #图片目录 } location /images.abc.com { rewrite '^/images.abc.com/(.*)$' http://images.abc.com/$1; } } server { listen 8001; server_name api.tt.com; access_log logs/proxy.access.log; error_log logs/proxy.error.log;
location / { 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 https://www.tt.com; } } log_format mainAccess '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" $status "$http_x_forwarded_for" [$request_body] [$ssl_client_s_dn]'; 日志格式 $remote_addr #客户端地址 211.28.65.253 $remote_user #客户端用户名称 -- $time_local #访问时间和时区 18/Jul/2012:17:00:01 +0800 $http_host #请求地址,即浏览器中你输入的地址(IP或域名) www.abc.com 192.168.100.100 $request_method #访问页面的请求方法 get $uri #请求的文件和路径,不包含”?”或者”#”之类的东西 $query_string #GET请求中的参数 foo=123&bar=blahblah;这个变量只可以被修改 $status HTTP #请求状态 200 $http_x_forwarded_for #真实IP地址 $request_body #记录POST请求 $ssl_client_s_dn #返回建立的SSL连接中客户端证书的DN主题字段 ------------------------------------------------------------------------------------------------------- $upstream_status #upstream状态 200 $body_bytes_sent #发送给客户端文件内容大小 1547 $http_referer #url跳转来源 https://www.baidu.com/ $http_user_agent #用户终端浏览器等信息 $upstream_addr #后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80 $request_time #整个请求的总时间 0.205 $upstream_response_time #请求过程中,upstream响应时间 0.002日志格式 客户端地址 客户端用户 访问时间和时区 $request #请求的URI和HTTP协议 GET /article-10000.html HTTP/1.1 $request_uri #请求的整个字符串,包含了后面请求的东西 $ssl_cipher #返回SSL连接中使用的密码字段的算法。 RC4-SHA $ssl_client_serial #返回SSL连接中客户端证书的序列号。 $ssl_client_s_dn #返回SSL连接中客户端证书的DN主题字段。 $ssl_client_i_dn #返回SSL连接中客户端证书的DN发行者字段。 $ssl_protocol #返回SSL连接中使用的协议。 TLSv1 $ssl_session_id #需要0.8.20以上版本。 $ssl_client_verify #如果客户端证书审核通过,这个变量为“SUCCESS”。 $ssl_client_raw_cert #返回SSL连接的PEM格式客户端证书; server { listen 9001; server_name api.tt.com; access_log logs/proxy.access.log mainAccess; error_log logs/proxy.error.log;
location / { proxy_set_header Host 'api.tt.com'; proxy_set_header X-SSL-CERT $ssl_client_raw_cert; #通过X-SSL-Cert包头向服务器提供证书信息 proxy_ssl_certificate /home/tom/data/cert/apiclient_cert.pem; proxy_ssl_certificate_key /home/tom/data/cert/apiclient_cert.key; proxy_pass https://123.123.123.123; } } server { listen 9002; access_log logs/proxy.access.log; error_log logs/proxy.error.log;
location / { resolver 8.8.8.8; #正向代理,DNS 解析 IP 地址 proxy_pass $scheme://$http_host$request_uri;
#$scheme: 所用的协议,http或https #$http_host: 始终等于HTTP_HOST请求标题 #$host :等于$http_host,小写且无端口号,若HTTP_HOST不存在或空值,等于server_name的值 #$request_uri: 完整url中去最前面$host的部分,如:www.qq.com/a/b?c=6,$request_uri== /a/b?c=6 proxy_buffers 256 4k; #缓冲区的数量和大小 proxy_max_temp_file_size 0k; #关闭临时文件缓冲 } } server { listen 9003; server_name 192.168.2.2; access_log logs/proxy.access.log; error_log logs/proxy.error.log;
location / { 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.2.100:9000; } } server { listen 9004; server_name 192.168.2.2; access_log logs/file.access.log; error_log logs/file.error.log;
location / { root /home/tom/data/files; } } server { listen 9000; server_name 192.168.2.2 down.abc.com; access_log logs/file.access.log; error_log logs/file.error.log;
location / { root /home/tom/data/files; } } server { listen 9443; server_name 192.168.2.2 down.abc.com; access_log logs/file.access.log; error_log logs/file.error.log;
location / { root /home/tom/data/files; } } 第一版配置: proxy_set_header X-Forwarded-For $remote_addr; #如上配置只能增加负载均衡ip地址,丢失了客户端真实ip和任意中间代理ip 第二版配置 proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr"; #如上配置在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址 第三版配置(最为简单) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #$proxy_add_x_forwarded_for已经实现了第二版的功能,直接使用该内置变量即可
最常用的配置