Это моя первая установка с nginx, и я использую его для прокси для nodejs. HTTP находится на порту 3000, а HTTPS - на порту 3001.
Если я пойду в http://test.domain.com загружает обычные незащищенные страницы. Если я пойду в https://test.domain.com он загружает защищенные страницы. Но я хочу, чтобы он перенаправлялся с не https на https.
Что не так с моей конфигурацией? Это весь файл domain.conf, который я использую.
server {
listen 80;
server_name test.domain.com
return 301 https://test.domain.com$request_uri;
}
server {
listen 443 ssl;
server_name test.domain.com;
ssl_certificate /etc/nginx/ssl/domain.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass https://127.0.0.1:3001;
proxy_redirect off;
}
}
Я перезапускал nginx несколько раз.
Спасибо!
Вы можете использовать перезапись в своем блоке http-сервера
server {
listen 80;
server_name test.domain.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
Отсутствует ";" в конце строки. (или просто сломанная копия / вставка?)
server_name test.domain.com;
Я думаю, у вас есть еще один server_block, работающий на сервере по умолчанию, который переопределяет этот без действительного имени сервера
Подсказки:
Если вы хотите перехватить все HTTP-запросы одним глобальным серверным блоком, используйте default_server:
listen 80 default_server;
Вы можете использовать больше переменных;)
return 301 https://test.domain.com$request_uri;
к
return 301 https://$host$request_uri;
Не используйте перезапись, возврат происходит быстрее всего.
Добавьте эту строку в конфигурацию порта 80 для автоматического перенаправления на https с параметрами, удалите возврат и при необходимости настройте порт.
if ($http_x_forwarded_proto != 'https') {
#rewrite ^(.*) https://$host$1 redirect;
}