Назад | Перейти на главную страницу

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 несколько раз.

Спасибо!

Вы можете использовать перезапись в своем блоке http-сервера

server {
    listen 80;
    server_name test.domain.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}

Отсутствует ";" в конце строки. (или просто сломанная копия / вставка?)

    server_name test.domain.com;

Я думаю, у вас есть еще один server_block, работающий на сервере по умолчанию, который переопределяет этот без действительного имени сервера

Подсказки:

  1. Если вы хотите перехватить все HTTP-запросы одним глобальным серверным блоком, используйте default_server:

    listen 80 default_server;
    
  2. Вы можете использовать больше переменных;)

    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;
}