В моей компании работает веб-сервер с nginx. Конфигурация настроена так, что каждый запрос на определенном блоке сервера принудительно переписывается на https, используя блок местоположения. Это полная конфигурация для определенного домена:Исключение Nginx для правила перезаписи
# HTTP server
server {
listen 80;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
rewrite ^(.*) https://$host$1 permanent;
}
# HTTPS server
server {
listen 443;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
root /usr/share/nginx/html/mydomain_server;
ssl on;
ssl_certificate /etc/certs/mydomain-bundle.crt;
ssl_certificate_key /etc/certs/mydomain.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/mydomain.ssl.access.log main;
error_log /var/log/nginx/mydomain.ssl.error.log error;
location/{
try_files $uri $uri/ =404;
}
error_page 404 /404-mydomain.html;
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Этот домен обслуживает несколько реализаций одного и того же программного обеспечения для разных клиентов, и работает следующим образом:
Customer John: www.domain.com/John
Customer Ada: www.domain.com/Ada
etc...
Очевидно, что, как вы можете видеть, все доступ к таким URL-адресам перенаправляется на HTTPS.
Теперь существует особая потребность в одном клиенте, чтобы этого не произошло.
Я читаю официальный документ here о местонахождениях, в котором говорится, что я не могу не соответствовать определенному выражению (как указано here too), и я не могу найти способ заставить его работать.
Я попытался добавить еще один блок определения местоположения, соответствующий путь клиента перед умолчанию, как это:
server {
listen 80;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
root /usr/share/nginx/html/mydomain_server;
location ^~ /Mole/ {
try_files $uri $uri/ =404;
}
location/{
rewrite ^(.*) https://$host$1 permanent;
try_files $uri $uri/ =404;
}
}
, который не работает, так как крот по-прежнему перенаправлен на HTTPS. Я пробовал использовать «~», «=» и даже просто «location/Mole /», без успеха. Не проблема с кешем браузера, поскольку я уже пробовал его. Что мне не хватает?
Вы проверили с завитком/Wget? У вас есть постоянная переадресация, и ваш браузер, возможно, кэшировал ее. –
Как указано в самом конце, я проверил это. Пробовал с разными браузерами с анонимными сеансами/красными кэшами. – Seether
Кэши не относятся к 301. История браузера. В окне истории щелкните правой кнопкой мыши запись для этого сайта и найдите вариант «забудьте об этом сайте». Это также должно очистить любой заголовок Strict Transport Security, который вы, возможно, установили. И старайтесь всегда свернуть, браузеры ненадежны - слишком много скрытых функций. Но ваша ошибка, скорее всего, у вас нет веб-корня, определенного в вашем блоке сервера, так что же такое сопоставление try_files? – Melvyn