我正在尝试使用 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/webappname
,http://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 首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后按照正则表达式在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果没有找到与正则表达式匹配的,则使用先前记住的前缀位置的配置。...
另外:考虑一下你的用例alias
,try_files
在同一个location
。https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#using-the-try-files-uri-directive-with-alias