2014-09-24 4 views
0

В моей компании работает веб-сервер с 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 /», без успеха. Не проблема с кешем браузера, поскольку я уже пробовал его. Что мне не хватает?

+0

Вы проверили с завитком/Wget? У вас есть постоянная переадресация, и ваш браузер, возможно, кэшировал ее. –

+0

Как указано в самом конце, я проверил это. Пробовал с разными браузерами с анонимными сеансами/красными кэшами. – Seether

+0

Кэши не относятся к 301. История браузера. В окне истории щелкните правой кнопкой мыши запись для этого сайта и найдите вариант «забудьте об этом сайте». Это также должно очистить любой заголовок Strict Transport Security, который вы, возможно, установили. И старайтесь всегда свернуть, браузеры ненадежны - слишком много скрытых функций. Но ваша ошибка, скорее всего, у вас нет веб-корня, определенного в вашем блоке сервера, так что же такое сопоставление try_files? – Melvyn

ответ

2

Вы можете попробовать использовать директиву карты для идентификации клиентов, которые предпочитают использовать HTTP:

map $uri $use_https { 
    default 1; 
    ~^/Mole/ 0; # add other exceptions as needed 
} 

server { 
    listen 80; 
    server_name www.mydomain.it mydomain.it admin.mydomain.it; 
    root /usr/share/nginx/html/mydomain_server; 

    location/{ 
     if ($use_https) { # consider using 302 for testing 
      return 301 https://$host$request_uri; 
     } 
     try_files $uri $uri/ =404; 
    } 
} 
+0

Работает как шарм. Моль (хотя и не настоящее имя клиента) будет очень счастлив! Спасибо. – Seether

Смежные вопросы