nginx反向代理后访问404

通过nginx反向代理后网站部分资源加载不正常,页面不能正常显示

下边这种全部拦截的方式可以正常访问网站

正确配置1

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ddns.aaa.com;
    ssl_certificate /opt/openresty/nginx/conf/cert/chunyu.work.pem;
    ssl_certificate_key /opt/openresty/nginx/conf/cert/chunyu.work.key;
    access_log  logs/ddns-go.log  main;
    location / {
        proxy_pass http://172.31.50.25:9876;
        proxy_redirect off;
        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 Upgrade $http_upgrade;
        proxy_max_temp_file_size 0;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
    }
}

错误配置

想通过拦截jp1,jp2的方式,使用同一个域名访问不同网站,

例如:www.xxx.com/jp1

www.xxx.com/jp1

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ddns.aaa.com;
    ssl_certificate /opt/openresty/nginx/conf/cert/chunyu.work.pem;
    ssl_certificate_key /opt/openresty/nginx/conf/cert/chunyu.work.key;
    access_log  logs/ddns-go.log  main;
    location /jp1 {
        proxy_pass http://172.31.50.25:9876;
        proxy_redirect off;
        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 Upgrade $http_upgrade;
        proxy_max_temp_file_size 0;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
    }
}

网站样式加载错误,甚至不能正常访问

正确配置

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ddns.chunyu.work;
    ssl_certificate /opt/openresty/nginx/conf/cert/chunyu.work.pem;
    ssl_certificate_key /opt/openresty/nginx/conf/cert/chunyu.work.key;
    access_log  logs/ddns-go.log  main;
    location /jp1/ {
        proxy_pass http://jp1.chunyu.work:9876/;
        proxy_redirect off;
				proxy_set_header Host $host;
				proxy_set_header X-Forwarded-Proto $scheme;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header Connection "";
        proxy_max_temp_file_size 0;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
    }
}

如果还是有静态资源访问404,可以增加下边配置

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            proxy_pass         http://jp1.chunyu.work:9876/;
            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 ~ .*\.(js|css)?$ {
            proxy_pass         http://jp1.chunyu.work:9876/;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            expires      12h;
        }

比如请求 /a/b.html

location /a {
    proxy_pass http://server;
}

location /a/ {
    proxy_pass http://server/;
}

如上两个匹配成功后,实际代理的目标url分别是

http://server/a/b.html (把/a/b.html拼接到http://server之后)
http://server/b.html (把/a/b.html的/a/去掉之后,拼接到http://server/之后)


nginx反向代理后访问404
https://www.hechunyu.com/archives/nginxfan-xiang-dai-li-hou-fang-wen-404
作者
chunyu
发布于
2022年06月14日
许可协议