Перенаправить все http на https в nginx, кроме одного файла - PullRequest
10 голосов
/ 08 декабря 2011

В настоящее время я запускаю свой сайт по протоколу http и хочу переместить его на https, чтобы nginx автоматически обрабатывал перенаправление. Думаю, это довольно тривиально.

Однако есть один файл, который (по нескольким причинам) имеет горячую ссылку с других сайтов, некоторые из которых расположены по протоколу http, а некоторые - через https. Я хочу убедиться, что файл доступен через http и https, чтобы браузеры не жаловались на диалог «смешанный контент». Путь к файлу выглядит примерно так:

HTTP (s): //mydomain.com/scripts/ [some_sha1_hash] /file.js

Итак, правило nginx должно гласить: «Если запрос уже по https, все хорошо, и просто прокси-прокси его. В противном случае перенаправьте все запросы с http на https, кроме случаев, когда запрашивается этот файл, в в этом случае не делайте такого перенаправления http-> https. "

Может кто-нибудь сказать мне, где искать, чтобы узнать о такой конфигурации, или помочь мне с самой конфигурацией? Заранее спасибо. (Извините, но я еще не достаточно опытен в конфигурации nginx.)

Ответы [ 3 ]

6 голосов
/ 06 мая 2015

Это то, что я сделал, и это работает:

server {
    listen 80;
    server_name example.com;
    charset     utf-8;
    access_log /var/www/path/logs/nginx_access.log;
    error_log /var/www/path/logs/nginx_error.log;

    location /path/to/script.js {
          # serve the file here
    }
    location / {
        return 301 https://example.com$request_uri;
    }
}

Этот обрабатывает только http-запросы и обслуживает указанный файл - в противном случае перенаправляется на https. Определите свой блок сервера ssl, который будет обслуживать все запросы https.

server {
   listen         443;
   server_name    example.com;

   ssl            on;

  # rest of the config
}

Таким образом, ваш файл скрипта будет доступен как на http, так и на https.

4 голосов
/ 20 ноября 2012

Попробуйте это:

server {
  listen 80; ssl off;
  listen 443 ssl;
  server_name example.com;

  # <ssl settings>
  # ... other settings

  location = /scripts/[some_sha1_hash]/file.js {
    # Empty block catches the match but does nothing with it
  }

  location / {
    if ($scheme = "http") {
      rewrite ^ https://$http_host$request_uri? permanent;
    }

    # ... other settings
  }
}
0 голосов
/ 11 декабря 2011
server {
   listen         80;
   server_name    my.domain.com;
   rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
   listen         443;
   server_name    my.domain.com;

   ssl            on;

   [....]
}

Вышесказанное в основном должно помочь, если я не ошибаюсь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...