Назад | Перейти на главную страницу

Nginx proxy_pass работает только с завершающей косой чертой

Я пытаюсь провести Блестящий сервер в подпутье / shiny / моего веб-сайта. Используя конфигурацию ниже, я могу получить доступ к своему демонстрационному приложению через www.example.com/shiny/demo/.

Однако, когда я исключаю последнюю косую черту из URI, я попадаю на сайт www.example.com/demo/, которого не существует. Я не знаю, какая часть моей конфигурации приводит к этому перенаправлению: хотя у меня rewrite_log on Я ничего не вижу в error.log. Если я удалю перезапись или отброшу косую черту из proxy_pass, все перестанет работать. Завершающая косая черта в директиве местоположения не является строго необходимой (я думаю?), Но я бы предпочел оставить ее, ее удаление, похоже, тоже не имеет значения. Я не уверен, нужен ли мне 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;
    }
}