Nginx не перенаправляет, но работает
Это моя первая установка с 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 несколько раз.
Спасибо!
3 ответа
Вы можете использовать переписать в своем блоке 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 с параметрами, удалите return и при необходимости настройте порт.
if ($http_x_forwarded_proto != 'https') {
#rewrite ^(.*) https://$host$1 redirect;
}