Nginx优化解决问题
Posted y_zilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx优化解决问题相关的知识,希望对你有一定的参考价值。
1、nginx反向代理屏蔽,所有连接请求中断,返回444
location /admin/
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://admin;
#把原http请求的Header中的Host字段也放到转发的请求里,代理的后端服务器可以通过Host头得知用户访问的真正的域名,如不设置,则得到是代理服务(nginx)的IP,这样对于动态拼接的url,后端服务器能在页面里返回正确的url
proxy_set_header HOST $host;
#透传客户端真实IP地址
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#通过nginx设置HttpOnly Secure SameSite参数解决Cookie跨域丢失
proxy_cookie_path / "/; httponly; secure; SameSite=Lax";
#deny all;
#过滤其他域名的请求,返回444状态码
return 444;
2、nginx log文件 json格式配置
log_format main '"DateTime":"$time_iso8601",'
'"client":"$remote_addr",' 客户端的ip地址
'"uri":"$uri",'
'"status":"$status",'
'"domain":"$host",'
'"host":"$server_addr",'
'"size":"$body_bytes_sent",' 发送给客户端文件主体内容大小
'"rt":"$request_time",'
'"urt":"$upstream_response_time",'
'"uct":"$upstream_connect_time",'
'"uht":"$upstream_header_time",'
'"useragent":"$http_user_agent",' 客户端浏览器的相关信息
'"upstreampstatus":"$upstream_status",'
'"upstreamaddr":"$upstream_addr",'
'"AC-LogTypeID":10,'
'"AC-TraceId":"$upstream_http_x_b3_traceid",'
'"AC-LogType":"proxy-log-type"'
'';
'"request": "$request",' 请求的url与http协议
'"request_method": "$request_method",'
'"uri": "$uri", '
'"http_referrer": "$http_referer",' 从那个页面链接访问过来的
'"http_x_forwarded_for": "$http_x_forwarded_for",' 客户端真实ip地址
access_log /apps/usr/nginx/logs/access_cronlog.log main;
#什么是remote_addr
remote_addr 是服务端根据请求TCP包的ip指定的。假设从client到server中间没有任何代理,那么web服务器(nginx,apache等)就会把client的ip设为IPremote_addr;如果存在代理转发http请求,web服务器会把最后一次代理服务器的IP设置为remote_addr;
#什么是x_forwarded_for
当使用代理时,web服务器无法通过TCP数据包来源获得发起请求的client的真实IP,因此代理服务器通常会在http请求头增加一个叫做x_forwarded_for的字段,用来记录请求发起者的真实IP;
3、nginx安装需要指定的模块
--user=mms --group=mms --prefix=/apps/usr/nginx --error-log-path=/apps/var/nginx/error.log --http-log-path=/apps/var/nginx/access.log --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module --with-http_realip_module
--with-http_stub_status_module #nginx的客户端状态
--with-http_ssl_module #ssl加密
--with-http_sub_module #web站点内容过滤功能模块
--with-http_gzip_static_module #预读gzip功能
--with-http_realip_module #在nginx访问日志中去除代理IP,显示客户的真实IP
4、NGINX跨域
location /datang-h5/
add_header Access-Control-Allow-Origin *;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://datang-h5/;
proxy_set_header HOST $host:18091;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_method = 'OPTIONS')
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
5、Nginx支持ipv6配置
#需要–with-ipv6模块
#https ipv6地址需要解析
server
listen [::]:80 ipv6only=on;
server
listen [::]:443 ssl ipv6only=on;
访问格式:
https://[fe80::fc44:6e5e:eeda:ebac]:443
6、Nginx IP鉴权
#通过allow
location /api/v1
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://api-zuul;
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_set_header X-Forwarded-For $http_x_forwarded_for;
#proxy_set_header X-Forwarded-For $remote_addr;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Cluster-Client-IP;
allow 43.225.211.91;
allow 112.33.12.149;
allow 218.205.209.238;
allow 203.130.42.149;
allow 223.104.17.213;
allow 112.35.69.29;
allow 112.35.69.101;
allow 124.64.17.188;
allow 113.46.147.67;
allow 120.244.174.135;
#deny all;
以上是关于Nginx优化解决问题的主要内容,如果未能解决你的问题,请参考以下文章
优化 C# 代码片段、ObservableCollection 和 AddRange