NGINX正向代理,请求报⽂返回值200,NGINXerror.log显⽰http_code400报错信息:
write的返回值(nginx cannot assign requested adddress) while connecting to upstream
具体情况:
1. nginx 正向代理:内⽹⽹关过NGINX正向代理访问公⽹
2. 502 Bad gateway:浏览器页⾯报错
3. NGINX error.log:报错⽇志输出为 “(cannot assign requested adddress )while connecting to upstream”
4. 代理服务器为共享服务器,上⾯已有⼀户使⽤代理,进程数开到了最⼤,系统参数未做增设,共享服务器⽆法重启
⽣效。
5. 系统: CentOS 7.X / 32核CPU 测试环境
6. NGINX版本:1.14.X
愁啊愁啊,看了N多博客
…此处省略⼀万字
看了那么多博客,折腾很久,最后还是请教⼤佬,解决了
其实这个报400的问题已经有⼈写到博客⾥了,硬⽣⽣是问题解决了才被搜索到,已哭晕在厕所参考⽂档:
原因:
1. 我的后端访问的公⽹地址是https,⽽nginx默认不⽀持
2. 我的NGINX编译模块未添加,⽀持HTTPS的正向代理第三⽅模块
3. 我的server配置也是⼀塌糊涂…
解决思路:
第⼀步:到需要添加的第三⽅模块,编译安装好它:
① ngx_http_proxy_connect_module-master(正向代理HTTPS模块)
② nginx_upstream_check_module-master(NGINX健康检查模块,这个是临时加上的)
关键配置
$ cd nginx-1.9.2/
$ patch -p1 </path/to/ngx_http_proxy_connect_module/patch/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
当然这⾥,你不能只编译⼀个第三⽅模块,你后⾯还要加很多你需要加的模块或路径之类的东西
参考链接:
关键信息1:
注意这⾥ “-p1”,没有空格,减p1,三个字符连在⼀起;还有就是再加⼀个也是⽤ “-p1”,⽽不是“-p2”
关键信息2:
不同版本需要指定的补丁之类的信息不同
关键信息3:
那个“/path/to/” 就是你的第三⽅模块放在服务器上的存放路径,如果你的是“/home/test/models/”,那你
的路径就是这个,⽽不是“/home/test/models/to/”
关键信息4:
如果你的nginx安装⽂件已经使⽤多次,⽽且前⾯不知对它⼲了些啥,主要是你的 “patch -p1 < ......”都不知道指定错误或什么乱七⼋糟的东西时,你需要果断 “rm -rf 你的nginx安装⽂件” ,选择重零开始,⽤新的安装⽂件给它指定正确唯⼀的路径,然后你后⾯的编译才会没有莫名其妙的各种五花⼋门的报错信息出现
第⼆步:写好正确的配置
worker_processes auto;
worker_rlimit_nofile 65534;
events {
events {
worker_connections 65534;
multi_accept on;
use epoll;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 10;
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 100;
pes;
server_tokens off;
charset UTF-8;
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
gzip on;
log_format access '$remote_addr - $remote_user [$time_local] "$request"' '$status$body_bytes_sent "$http_referer"'
'"$http_user_agent" $http_x_forwarded_for';
#include /home2/nginx_model/conf.d/*.conf;
#include /home2/nginx_model/sites-enabled/*;
server {
listen 7070;
#必须要配置dns,多个就⽤空格隔开即可;查看dns: 'cat /f ' resolver ;
resolver_timeout 5s;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
client_max_body_size 1000M;
client_body_buffer_size 128k;
access_log /home2/test/logs/http_proxy.access.log main;
error_log /home2/test/logs/log debug;
location / {
proxy_pass $host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location /nginx_status {
stub_status on;
access_log off;
auth_basic_user_file conf/.nginx_status;
allow 127.0.0.1;
deny all;
}
}
}
⼤佬丢给我的配置:
server {
listen 3128;
resolver 8.8.8.8;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
access_log /opt/tengine/logs/http_proxy.access.log main;
error_log /opt/tengine/logs/log;
location / {
proxy_pass $host;
proxy_set_header Host $host;
}
}
还有就是:
浏览器打开NGINX状态页⾯:502 Bad gateway
不⽤管,正向代理这样报错才对
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论