nginx-带有尾部斜杠的所有位置的代理通行证

时间:2019-08-04 12:41:12

标签: nginx reverse-proxy nginx-location nginx-reverse-proxy nginx-config

nginx中代理传递存在问题,因为我是proxy_pass我的网站访问* .azurewebsites.net

假设我有一个sampledomain.com并有URL:

    指向的
  • sampledomain.com/folder1 * .azurewebsites.net / folder1
  • sampledomain.com/folder2,指向* .azurewebsites.net / folder2

如果我打开sampledomain.com/folder1,浏览器将重定向到* .azurewebsites.net / folder1 /并加载页面

但是,如果我打开sampledomain.com/folder1/,浏览器将加载页面而不进行重定向。

不同之处在于URL末尾的斜杠。

而且,当我打开/ folder2和/ folder2 /

时,也会发生同样的事情

这是我的缩写 nginx.conf:

http {
     upstream backend {
         server 127.0.0.1:8001;
         server 127.0.0.1:8002;
     }

     upstream web01 {
         server Url01.azurewebsites.net;
     }

     upstream web02 {
         server Url02.azurewebsites.net;
     }

     server {
          listen 80;
          listen [::]:80 default_server;
          server_name   localhost;

          location / {
               proxy_pass http://backend;
               proxy_set_header    X-Real-IP    $remote_addr;
          }
     }

     server {
          listen 8001;
          listen [::]:80 default_server;
          server_name   web01;

          location / {
               proxy_set_header Host Url01.azurewebsites.net;
               proxy_pass http://web01/;
          }
     }

     server {
          listen 8002;
          listen [::]:80 default_server;
          server_name   web02;

          location / {
               proxy_set_header Host Url02.azurewebsites.net;
               proxy_pass http://web02/;
          }
     }
}

我试图创建一种解决方法,如果我为/ folder1和/ folder2添加特定位置,则可以实现我所需要的。

这是我在nginx.conf中所做的更改:

    server {
          listen 8001;
          listen [::]:80 default_server;
          server_name   web01;

          location / {
               proxy_set_header Host Url01.azurewebsites.net;
               proxy_pass http://web01/;
          }
          location /folder1 {
               proxy_set_header Host Url01.azurewebsites.net;
               proxy_pass http://web01/folder1/;
          }
          location /folder2 {
               proxy_set_header Host Url01.azurewebsites.net;
               proxy_pass http://web01/folder2/;
          }
     }

     server {
          listen 8002;
          listen [::]:80 default_server;
          server_name   web02;

          location / {
               proxy_set_header Host Url02.azurewebsites.net;
               proxy_pass http://web02/;
          }
          location /folder1 {
               proxy_set_header Host Url01.azurewebsites.net;
               proxy_pass http://web02/folder1/;
          }
          location /folder2 {
               proxy_set_header Host Url02.azurewebsites.net;
               proxy_pass http://web02/folder2/;
          }
     }

在这种情况下,如果我需要添加/ folder3和/ folder4或任何其他URL / *怎么办?

有没有一种方法可以代替手动在nginx.conf中添加位置,而是可以使用代码,正则表达式或语法来对所有文件夹/ ?*


我读到下面的代码块应该执行此操作,但它只是重定向,因为最后缺少斜杠。

location / {
               proxy_set_header Host url.azurewebsites.net;
               proxy_pass http://web01/;
          }

0 个答案:

没有答案