Nginx 根据位置块重定向所有传入请求

Nginx 根据位置块重定向所有传入请求

我使用 Nginx 作为反向代理。我假设我有一个类似 test.com 的域名和一个带有类似 /test 路径的位置块。该位置将通过 proxy_pass 传递到另一个网站,例如http://test2.com。当我在浏览器上输入 URL 时,它会将第一个请求重定向到应用程序(http://test.com/测试/-->http://test2.com/)。但是,所有传入请求都将在不包含我在 Nginx 上定义的位置的情况下发送。我怎样才能让所有传入请求都遵循该路径?我想要这样的东西:

  • 第一个请求:http://test.com/测试/-->http://test.com

  • 传入请求:http://test.com/test/statifile.js

  • http://test.com/test/api/something等等...

    server {
     listen 80;
     charset utf-8;
     server_name test.com;
     location = /auth/test{
         internal;
         proxy_pass http://test.com/test/decisions/;
         proxy_pass_request_body off;
         proxy_set_header Content-Length '';
         proxy_set_header X-Original-URI $request_uri;
     }
     location = /test/decisions/ {
         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 X-Forwarded-Proto $scheme;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $http_connection;
         proxy_set_header Authorization $http_authorization;
         proxy_pass http://valid.domain/test/api/authorization;
     }
     location /test/ {
         auth_request /auth/test;
         auth_request_set $auth_status $upstream_status;
         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 X-Forwarded-Proto $scheme;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $http_connection;
         proxy_set_header Authorization $http_authorization;
         proxy_pass https://test2.com/;
         proxy_pass_header Server;
         proxy_http_version 1.1;
         proxy_redirect default;
         access_log /var/log/nginx/access.log;
         client_max_body_size 10240M;
     }
    }
    

答案1

这里的“传入请求”一词令人困惑。我假设你的意思是:

  1. 浏览器向 发出请求http://example.com/test/,由 nginx 代理至http://2.example.com/
  2. http://2.example.com/statfile.js当你希望向以下对象发出请求时,浏览器会直接向以下对象发出后续请求:http://example.com/test/statfile.js

对于此问题陈述,最佳解决方案是修改2.example.com服务器配置,使其创建指向 的 URL,example.com/test而不是指向 的 URL 2.example.com。通常,Web 应用程序中有一个可以修改的根 URL 设置。

可靠性较低且性能较差的选项是使用sub_filter模块来替换块中出现的所有2.example.comwith 。example.com/test/proxy_pass

然而,这可能会产生意想不到的副作用。

相关内容