Nginx Https Redirect с конечным слешем и параметрами запроса - PullRequest
1 голос
/ 07 марта 2019

У меня есть конфигурация сервера Nginx, которая уже перенаправляет http запросы на https, но я пытаюсь найти правильный способ изменить этот код или полностью изменить его, чтобы перенаправить http запросы на https и добавляют косую черту /, если в URL-адресе ее нет. Эти перенаправления должны также гарантировать, что параметры запроса все еще существуют, несмотря на перенаправление. Я видел, где большинство ответов на мои похожие вопросы ссылались на ^/(.*)/$ как код для добавления косой черты, но я не уверен, как его использовать, и стоит ли использовать rewrite вместо if. Кто-нибудь может помочь прояснить мою путаницу?

nginx.config:

upstream nodejs {
    server 127.0.0.1:8081;
    keepalive 256;
}

server {
    listen 8080;

    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }

    location / {
        proxy_pass  http://nodejs;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP   $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    gzip on;
    gzip_comp_level 4;
    gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

}

Цель:

http://www.example.com/page-one -> http://example.com/page-one/
http://example.com/page-two -> https://www.example.com/page-two/
https://www.example.com/page-three?page=2 -> https://www.example.com/page-three/?page=2

1 Ответ

1 голос
/ 08 марта 2019

Три шага в ваших целях выполняются по-разному. Первый шаг лучше всего достигается с использованием отдельных server блоков. Второй шаг у вас уже есть в вашем вопросе. На третьем шаге используется оператор rewrite.

Например:

server {
    listen 8080 default_server;
    return http://example.com$request_uri;
}
server {
    listen 8080;
    server_name example.com;

    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }

    rewrite ^(.*[^/])$ $1/ permanent;

    ...
}

Существующая строка запроса также добавляется к переписанному URL. Подробнее см. в этом документе .

...