nginx配置文件详解
1、配置文件
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已经实现了第二版的功能,直接使用该内置变量即可
2、配置文件详解
user nginx; 指定 nginx 运行的用户及用户组 worker_processes 4; 启动进程数量==CPU核心的数量 pid logs/nginx162.pid; PID 文件 error_log logs/nginx_error.log crit; 定义日志文件及级别 events { use epoll; 事件处理模型,可以不指定,Nginx会自动选择最佳的 worker_connections 100000; 单个进程最大并发量 -- ps:仅修改Nginx并发数是无效的,还需要系统参数 -- cat /etc/security/limits.conf -- * soft nofile 100000 -- * hard nofile 100000 } http { include mime.types; 设定mime类型 default_type application/octet-stream; 默认文件类型 server_tokens off; 不显示 Nginx 具体版本号 charset UTF-8; 设置字符集 proxy_intercept_errors on; 当Client请求时,若tomcat抛出404,nginx会跳转到一个固定页面 open_file_cache max=131072 inactive=60s; 打开文件缓存数量及缓存时间 open_file_cache_valid 80s; 多久检查一次缓存的有效信息 open_file_cache_min_uses 1; 访问次数超过 1 次才被缓存 server_names_hash_bucket_size 128; 服务器名字的hash表大小 client_header_buffer_size 4k; 默认请求包头信息的缓存 large_client_header_buffers 8 128k; 大请求包头部信息的缓存个数及容量 client_max_body_size 1500m; 上传文件大小,PHP默认上传文件不超过2M sendfile on; 开启高效文件传输模式 tcp_nopush on; 当包累计到一定大小才发送,防止网络阻塞,和 tcp_nodelay “互斥” fastcgi_intercept_errors on; 开启传递4xx或5xx错误信息到客户端,反向代理用proxy_intercept_errors on keepalive_timeout 60; 保持会话的超时时间,只有tcp_nodelay on,keepalive_timeout才有效 tcp_nodelay on; 防网络阻塞 gzip on; 开启gzip压缩功能 gzip_min_length 1k; 最小压缩的容量 gzip_buffers 4 16k; 压缩缓存大小 gzip_http_version 1.0; 压缩版本 gzip_comp_level 2; 压缩级别 gzip_types text/plain application/x-javascript text/css application/xml; 压缩类型 gzip_vary on; 给代理服务器加个vary标识,判断客户端浏览器是否要压缩,IE6不支持gzio压缩 include limit/limit_zone.conf 限制配置文件 include cache/cache_zone.conf; 缓存配置文件 include conf/vhost/*.conf; 虚拟主机配置文件 }
QQ:328864113 微信:wuhg2008