nginx 上可以有代理子位置吗?

nginx 上可以有代理子位置吗?

我正在尝试使用 nginx 设置一个服务器,以便通过如下所示的位置块为一些角度应用程序提供服务。但我想将请求代理到 /webapp/api。

在线性配置中我必须遵循哪个顺序?我尝试了这个,但请求转到第一个块。

location /webapp {
        #alias /var/www/webapp;
        alias /app/webapp/dist;
        try_files $uri$args $uri$args/ $uri/ /webapp/index.html;
}
location /api {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        client_max_body_size 100M;
}

并且在此配置中,代理嵌套根本不起作用。

location /webapp {
        #alias /var/www/webapp;
        alias /app/webapp/dist;
        try_files $uri$args $uri$args/ $uri/ /webapp/index.html;

        location /api {
                proxy_pass http://localhost:3001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                client_max_body_size 100M;
        }

编辑

我想要访问 Web 应用程序http://server/webappnamehttp://server/webappname/api其中 Web 应用程序是生产版本,并且 API 将在 Express.js 的后台运行,因此需要代理

答案1

您可以尝试以下方法:

location /webapp/api/ {
    proxy_pass http://localhost:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    client_max_body_size 100M;
}

location /webapp {
    #alias /var/www/webapp;
    alias /app/webapp/dist;
    try_files $uri$args $uri$args/ $uri/ /webapp/index.html;
}

根据文档

... 为了找到与给定请求匹配的位置,nginx 首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后按照正则表达式在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果没有找到与正则表达式匹配的,则使用先前记住的前缀位置的配置。...

另外:考虑一下你的用例aliastry_files在同一个locationhttps://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#using-the-try-files-uri-directive-with-alias

相关内容