Nginx proxy_pass 仅适用于尾部斜杠

Nginx proxy_pass 仅适用于尾部斜杠

我正在尝试举办Shiny 服务器在我的网站的 /shiny/ 子路径上。使用下面的配置,我可以通过 www.example.com/shiny/demo/ 访问我的演示应用程序。

但是,当我从 URI 中排除最后一个斜杠时,我最终会转到 www.example.com/demo/,而这个网站并不存在。我不知道配置的哪一部分会导致此重定向:虽然我知道,但rewrite_log on在 error.log 中却看不到任何内容。如果我删除重写或从 proxy_pass 中删除尾部斜杠,一切都会停止工作。location 指令中的尾部斜杠并不是必需的(我想?)但我宁愿保留它,删除它似乎也没什么区别。我不确定我是否需要 proxy_redirect,但删除它并不能解决问题。

关于如何修复我的配置,以便从 /shiny/demo 到 /demo/ 的重定向转到 /shiny/demo/,有什么建议吗?

我的配置,相关位置在底部:

# Redirect to HTTPS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

# Redirect to www subdomain
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate /path/to/cert;
    ssl_certificate_key /path/to/key;       

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

# Main server
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    root /path/to/root;

    index index.php;
    server_name www.example.com;

    ssl_certificate /path/to/cert;
    ssl_certificate_key /path/to/key;

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;


    location / {
        if ($request_uri ~ ^/(.*)\.html$) {  return 302 /$1;  }
        try_files $uri /$uri $uri.html $uri.php$is_args$query_string;
    }

    location ~ \.php$ {
        if ($request_uri ~ ^/([^?]*)\.php($|\?)) {  return 302 /$1$is_args$query_string;  }
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }


    location ^~ /shiny/ {
        rewrite_log on;
        rewrite ^/shiny/(.*)$ /$1 break;
        proxy_pass http://localhost:1234/;
        proxy_redirect http://localhost:1234/ $scheme://$server_name/shiny/;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
}

相关内容