Перенаправить все http на https в nginx, кроме одного файла
В настоящее время я запускаю свой сайт на http и хочу переместить его на https, так что nginx автоматически выполняет перенаправление. Я думаю, это довольно тривиально.
Однако есть один файл, который (по нескольким причинам) связан с другими сайтами, некоторые из которых находятся поверх http, а некоторые - по https. Я хочу убедиться, что файл доступен как для http, так и для https, чтобы гарантировать, что браузеры не жалуются на диалог "смешанный контент". Путь файла выглядит примерно так:
HTTP (S)://mydomain.com/scripts/[some_sha1_hash]/file.js
Итак, в правиле nginx следует сказать: "Если запрос уже превышен https, все сладко, а просто обратное-прокси-сервер. В противном случае перенаправляйте все запросы с http на https, за исключением случаев, когда этот один файл запрашивается, в в этом случае не нужно перенаправлять http- > https."
Может ли кто-нибудь сказать мне, где искать информацию о такой конфигурации, или помочь мне с самой конфигурацией? Заранее спасибо. (Извините, но я еще недостаточно подготовлен к конфигурации nginx.)
Ответы
Ответ 1
Это то, что я сделал, что работает:
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
}
Таким образом, ваш файл script будет доступен как на http, так и на https.
Ответ 2
Попробуйте следующее:
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
}
}
Ответ 3
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;
[....]
}
Вышеупомянутое должно в основном делать трюк, если im не ошибается