Skip to content

sawk '{if($NF=="HIT") hit++} END {printf "%.2f%\n",hit/NR*100 }' access.log

  • proxy 优化
//nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax:  proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

//设置nginx代理保存用户头信息的缓冲区大小
Syntax:  proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

//proxy_buffers 缓冲区
Syntax:  proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
//nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax:  proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

//设置nginx代理保存用户头信息的缓冲区大小
Syntax:  proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

//proxy_buffers 缓冲区
Syntax:  proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
[root@Nginx ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

//如何调用
location / {
    proxy_pass http://10.0.0.10:80;
    include proxy_params;
}
[root@Nginx ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

//如何调用
location / {
    proxy_pass http://10.0.0.10:80;
    include proxy_params;
}

1,proxy_next

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

proxy_next_upstream项定义了什么情况下进行重试

1``.Syntax: proxy_next_upstream error | timeout | invalid_header 
  ``| http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...; 
2``.Default:  proxy_next_upstream error timeout; 
3``.Context:  http, server, location
1``.Syntax: proxy_next_upstream error | timeout | invalid_header 
  ``| http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...; 
2``.Default:  proxy_next_upstream error timeout; 
3``.Context:  http, server, location

2.proxy_redirect

proxy_redirect 该指令用来修改被代理服务器返回的响应头中的Location头域和“refresh”头域

语法结构为:

proxy_redirect redirect replacement;
proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
proxy_redirect default;
proxy_redirect off;

错误示例:

server {
    listen 80;
    server_name www.xxx.com;
    index  index.html;

    location /
    {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
    listen 80;
    server_name www.xxx.com;
    index  index.html;

    location /
    {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

当请求的链接为 http://www.xxx.com/aming   结果会返回301,定向到了 http://www.xxx.com:8080/aming/

❌ 注意

返回301有几个先决条件

1.location后面必须是/;

  1. proxy_pass后面的URL不能加uri,只能是IP或者IP:port结尾,并不能以/结尾;
  2. 访问的uri必须是一个真实存在的目录,如,这里的aming必须是存在的
  3. 访问的时候,不能以/结尾,只能是 www.xxx.com/aming

虽然,这4个条件挺苛刻,但确实会遇到类似的请求。解决方法是,加一行proxy_redirect http://:8080$host/ /;

正确示例:

server {
    listen 80;
    server_name www.xxx.com;
    index  index.html;

    location /
    {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_redirect http://$host:8080/ /;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Host # 包含客户端真实的域名和端口号;
X-Forwarded-Proto # 表示客户端真实的协议(http还是https);
X-Real-IP # 表示客户端真实的IP;
X-Forwarded-For # 这个 Header 和 X-Real-IP 类似,但它在多层代理时会包含真实客户端及中间
每个代理服务器的IP
server {
    listen 80;
    server_name www.xxx.com;
    index  index.html;

    location /
    {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_redirect http://$host:8080/ /;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Host # 包含客户端真实的域名和端口号;
X-Forwarded-Proto # 表示客户端真实的协议(http还是https);
X-Real-IP # 表示客户端真实的IP;
X-Forwarded-For # 这个 Header 和 X-Real-IP 类似,但它在多层代理时会包含真实客户端及中间
每个代理服务器的IP