首页 > 解决方案 > nginx位置和proxy_pass的问题

问题描述

我的 nginx.conf 中有一条规则不起作用,我不知道为什么。根据文档,它应该可以工作。部分配置如下所示。

端口 8100 上的第一条规则起作用并将调用http://example.com/api/domains重定向到https://localhost:8181/oan/resources/domains

# Working
server {
    listen                  8100 default_server;
    server_name             example.com;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        Host      $http_host;
    root                    /var/www/html/example;

    location /api {
       proxy_pass https://localhost:8181/oan/resources; break;
    }

    # For ReactJS to handle routes
    location / {
       if (!-e $request_filename) {
          rewrite ^(.*)$ / break;
       }
    }
}

# Not working
server {
    listen                  8200;
    server_name             api.example.com;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        Host      $http_host;

    location / {
       proxy_pass https://localhost:8181/oan/resources; break;
    }
}

最后一次调用 8200 端口:http ://api.example.com:8200/domains应该重定向到:https://localhost:8181/oan/resources/domains但不这样做。

这个配置有什么问题,我怎样才能让端口 8200 上的最后一条规则做正确的事情,总是重定向到https://localhost:8181/oan/resources/ $uri

标签: nginxnginx-reverse-proxyjwilder-nginx-proxy

解决方案


当您在前缀proxy_pass位置块中使用可选 URI时,Nginx 将通过执行直接文本替换来转换请求的 URI。

在您的情况下,前缀位置值为/,可选的 URI 值为/oan/resources. 所以请求的 URI/foo将被转换为/oan/resourcesfoo.

为了正确操作,两个值都应该以 结尾,/或者都不以 结尾/

例如:

location / {
    proxy_pass https://localhost:8181/oan/resources/;
}

有关详细信息,请参阅此文档


推荐阅读