nginx: как перенаправить http на https в проксированных запросах?

У меня есть следующий блок сервера:

server {

    listen 192.0.2.1:443 ssl;
    listen 192.0.2.1:80;
    server_name support.example.com;
    ssl_certificate           /etc/ssl/certs/support.example.com/fullchain.pem;
    ssl_certificate_key       /etc/ssl/private/support.example.com/privkey.pem;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    add_header Content-Security-Policy "frame-ancestors 'self' cloud.example.com example.com";
    access_log            /var/log/nginx/support.log;

    location / {
      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_pass          https://support.example.com;
      proxy_read_timeout  90;
    }
     location ~ .well-known {

             root /srv/web;
    }
}

Я бы хотел, чтобы каждый запрос, кроме location ~ .well-known перенаправлялся на https, я пробовал с директивой redirect, но это не сработало. Я бы хотел, чтобы каждый раз, когда клиент запрашивает не-http запрос, он перенаправлялся на https://support.example.com.

Note: Я бы хотел избежать создания нового виртуального сервера для не-http запросов.

0
задан 15 May 2020 в 01:40
1 ответ

Приведенный ниже блок сервера будет перехватывать http-запросы для support.example.com и перенаправлять на https.

Примечание: Перед изменением конфигурационных файлов всегда делайте возврат. Если что-то пойдет не так, вы сможете легко откатиться.

server {
    listen 192.168.0.100:80;
    server_name support.example.com
    return 301 https://support.example.com$request_uri;
}

Ниже приведены HTTP- и https-запросы для www.support.example.com на https support.example.com. Хотя это не важно при использовании поддоменов, таких как в вашем примере, это полезно, когда вы хотите, чтобы www.example.com был направлен на example.com. Я включаю его сюда только потому, что он может быть полезен вам или кому-то еще.

server {
    listen 192.168.0.100:80;
    listen 192.168.0.100:443 ssl;
    server_name www.example.com;

    # SSL Certs stuff for www.example.com goes here

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

После того, как вы перехватите все запросы, вы можете обрабатывать их обычным способом.

server {
    listen 192.168.0.100:443 ssl;
    server_name example.com;

    # SSL Stuff and other requirements go here

}

Все вышеперечисленное можно поместить в /etc/nginx/sites-available/example.com.conf

После внесения изменений Nginx может проверить ваши изменения с помощью следующей команды.

sudo nginx -t

You should get the following output;

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Вы можете перезагрузить Nginx с помощью -s reload

sudo nginx -s reload

Надеюсь, это то, что вы искали.

0
ответ дан 15 May 2020 в 02:54

Теги

Похожие вопросы