nginx 反向代理,如何不传递位置

nginx 反向代理,如何不传递位置

我们有什么:
带有 nginx 的反向代理服务器 - 外部:10.xx.xx.xx - 内部:192.xx.xx.1
在端口 9010 上运行服务的内部服务器:192.xx.xx.15
如果我们通过以下方式连接到代理,我们已经获得了服务https://10.xx.xx.xx/

但目标是:
如果我们通过以下方式连接,则可以在内部服务器上获取服务https://10.xx.xx.xx/内部服务器。但如果我们在配置中将位置从 / 设置为 /internalserver 或 /inernalserver/,我们只能获得默认的 nginx 索引页 ->https://10.xx.xx.xx/index.html

同样重要的是:我们希望得到利用https://10.xx.xx.xx/内部服务器但它应该只代理http://192.xx.xx.15:9010/http://192.xx.xx.15:9010/内部服务器

为什么不起作用?我们已经尝试了一些重写命令,但没有效果。

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name 10.xx.xx.xx;

    ssl_certificate            /etc/nginx/certificate.crt;
    ssl_certificate_key        /etc/nginx/certificate.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location /test/ {
            # rewrite ^/test(/.*)$ $1 break;
            proxy_pass        http://192.xx.xx.15:9010/;
}
}

答案1

使用重写可以实现此效果:

location /internalserver {
        rewrite /internalserver/(.*) /$1  break;
        proxy_pass         http://192.xx.xx.15:9010;
        proxy_redirect     off;
        proxy_set_header   Host $host;
}

不过,您根本不需要重写,只需在 proxy_pass 中指定确切的 url 即可:

location /internalserver {
  proxy_pass http://192.xx.xx.15:9010/;
}

在两种情况下,的使用和位置/都很重要。

相关内容