2016-02-26 3 views
0

Я использую следующие настройки:Проблемы с протоколом изменения после 301 редиректа (Nginx/BitrixVM/CentOS6.5)

s1.conf

# Default website 
server { 

    listen 80; 
    server_name test.com www.test.com; 
    return 301 https://test.com$request_uri; # enforce https 

    server_name_in_redirect off; 

    access_log /var/log/nginx/access.log main; 
    error_log /var/log/nginx/error.log warn; 

    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host:80; 
    proxy_set_header< X-Forwarded-Host $http_host 

    set $proxyserver "http://127.0.0.1:8888"; 
    set $docroot  "/home/bitrix/www"; 

    index index.php; 
    root /home/bitrix/www; 

    # Redirect to ssl if need 
    if (-f /home/bitrix/www/.htsecure) { rewrite ^(.*)$ https://$host$1 permanent; } 

    # Include parameters common to all websites 
    include bx/conf/bitrix.conf; 

    # Include server monitoring locations 
    include bx/server_monitor.conf; 
} 

s1_ssl.conf

# Default SSL certificate enabled website 
server { 
    listen 443 default_server ssl; 
    server_name test.com; 

    # Enable SSL connection 
    include bx/conf/ssl.conf; 
    server_name_in_redirect off; 

    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host  $http_host:443; 
    proxy_set_header X-Forwarded-Host $http_host; 
    proxy_set_header X-Forwarded-Proto https; 

    proxy_set_header HTTPS  YES; 

    set $proxyserver "http://127.0.0.1:8888"; 
    set $docroot  "/home/bitrix/www"; 

    index index.php; 
    root /home/bitrix/www; 

    # Include parameters common to all websites 
    include bx/conf/bitrix.conf; 

    # Include server monitoring API's 
    include bx/server_monitor.conf; 

} 

Когда я попробую ссылку http://test.com/xyz/ или https://test.com/xyz/ все в порядке. Но когда я пытаюсь ссылку как http://test.com/xyz или https://test.com/xyz Я получить 400 Bad Request, запрос Простой HTTP был отправлен HTTPS порт

Этот завиток выход:

curl -I -k https://test.com/xyz 
HTTP/1.1 301 Moved Permanently 
Server: nginx/1.6.2 
Date: Mon, 22 Feb 2016 09:13:28 GMT 
Content-Type: text/html; charset=iso-8859-1 
Connection: keep-alive 
Location: http://test.com:443/xyz/ 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 

Почему изменение протокол HTTP?

ответ

0

Вы забыли сказать, что ссылка на http://test.com/xyz является справочником.

что такое зло: mod_dir

А «завершающий слэш» Перенаправление выдается, когда сервер получает запроса на URL http://servername/foo/dirname где имя_директория является каталогом. Каталоги требуют конечной косой черты, поэтому mod_dir выдает перенаправление на http://servername/foo/dirname/.

и для него "HTTPS на" не работает, схема https: // не будет

, что должно быть сделано:

1) Nginx конфигурации ничего не

2 потрогать) в HTTPd конфигурации для вашего домена, например: /etc/httpd/bx/conf/bx_ext_site.local.conf

где строка со ntains имя вашего сервера, пример: ServerName site.local

дополняется следующими: https: //

быть так: ServerName https://site.local

, что все, что вам нужно

работает без каких-либо переадресаций

смысл проблемы кроется в руководстве http://httpd.apache.org/docs/2.2/mod/core.html#servername

Иногда сервер работает за устройство, которое обрабатывает SSL, такие как обратный прокси-сервер, балансировки нагрузки или SSL разгрузку прибора.Когда это значение , укажите схему https: // и номер порта, к которому клиенты подключаются в директиве ServerName, чтобы убедиться, что сервер генерирует правильные URL-адреса с саморефлексией.