У меня есть следующий блок сервера:
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 запросов.
Приведенный ниже блок сервера будет перехватывать 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
Надеюсь, это то, что вы искали.