Рейтинг:0

Nginx с http на https перенаправляет вместо загрузки пустой файл

флаг tm

Я пытаюсь перенаправить мой Laravel+vuejs+nuxtjs проект из http к https но когда я вхожу http://example.com или же http://www.example.com вместо этого загружается пустой файл

Что я сделал до сих пор:

1- Комментирование default_type приложение/октет-поток и добавление default_type текст/html вместо этого в nginx.conf

2-определяющий типы { } default_type "текст/обычный"; в место расположения /{} из примера.com.conf

3-nginx редирект с кодом ниже

сервер {
  слушать хх.хх.хх.хх:80;
    имя_сервера example.com www.example.com;
  вернуть 301 https://www.example.com$request_uri;
}

4- попытался перенаправить его с помощью файла .php со следующим файлом example.com.conf:

       сервер {
          слушать 37.152.191.249:80;
          имя_сервера www.example.com example.com;

         access_log /usr/local/apache/domlogs/example.com.bytes байт;
        access_log /usr/local/apache/domlogs/example.com.log объединенный;
        error_log /usr/local/apache/domlogs/example.com.error.log ошибка;

        корень /home/example/public_html/;
        индекс index.php;

   место расположения / {
типы { } default_type "текст/обычный";
    try_files $uri $uri/ /index.php?$query_string;

}

расположение ~ \.php$ {
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    включить fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_intercept_errors выключен;
    fastcgi_buffer_size 16 КБ;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}


        location ~* "/\.(htaccess|htpasswd)$" {запретить все;вернуть 404;}

        disable_symlinks if_not_owner from=/home/example/public_html;
}

index.php в коде public_html:

    $location = 'https://' . $_SERVER['HTTP_HOST']. $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 перемещен навсегда');
    header('Расположение:' . $location);
    выход;

Ничего из вышеперечисленного не помогло, и проблема все еще сохраняется.

+ Текущие конфигурации:

nginx -t отчет:

nginx: синтаксис файла конфигурации /etc/nginx/nginx.conf в порядке
nginx: проверка файла конфигурации /etc/nginx/nginx.conf прошла успешно

пример.com.ssl.conf :

сервер {
  слушать xx.xx.xx.xx:443 http2 ssl;
    имя_сервера пример.com;
        ssl_certificate /etc/pki/tls/certs/example.com.bundle;
        ssl_certificate_key /etc/pki/tls/private/example.com.key;
        ssl_протоколы TLSv1.2;
        ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EE3CDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eN$
        ssl_prefer_server_ciphers включен;

       ssl_session_cache общий: SSL: 10 м;
       ssl_session_timeout 60 м;
       вернуть 301 https://www.example.com$request_uri;
}
       сервер {
          слушать xx.xx.xx.xx:443 http2 ssl;
          имя_сервера www.example.com;

         журнал_доступа /usr/local/apache/domlogs/example.com.bytes байт;
        access_log /usr/local/apache/domlogs/example.com.log объединенный;
        error_log /usr/local/apache/domlogs/example.com.error.log ошибка;
        ssl_certificate /etc/pki/tls/certs/example.com.bundle;
        ssl_certificate_key /etc/pki/tls/private/example.com.key;
        ssl_протоколы TLSv1.2;
        ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eN$
        ssl_prefer_server_ciphers включен;

        ssl_session_cache общий: SSL: 10 м;
        ssl_session_timeout 60 м;

        корень /home/example/core/public/;
        индекс index.php;

   место расположения / {
  proxy_set_header Соединение «обновление»;
    прокси_http_версия 1.1;
    proxy_pass https://xx.xx.xx.xx:3000$uri;
    proxy_intercept_errors on;# Чтобы использовать директиву error_page, она должна быть включена
    страница_ошибки 404 = @php;
}

местоположение @php {
    try_files $uri $uri/ /index.php?$query_string;

}

расположение ~ \.php$ {
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    включить fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_intercept_errors выключен;
    fastcgi_buffer_size 16 КБ;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}


        location ~* "/\.(htaccess|htpasswd)$" {запретить все;вернуть 404;}

        disable_symlinks if_not_owner from=/home/example/public_html;

        местоположение /.well-known/acme-challenge {
                default_type "текстовый/обычный";
                псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }

        местоположение /.well-known/pki-validation {
                default_type "текстовый/обычный";
                псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }
}


Текущий пример.com.conf :

сервер {
  слушать хх.хх.хх.хх:80;
    имя_сервера example.com www.example.com;
  вернуть 301 https://www.example.com$request_uri;
}

Я не добавлял отчет nginx -T, поскольку он показывает нерелевантные файлы конфигурации с других веб-сайтов.

Кроме того, на сервере с несколькими сайтами и WordPress нет проблем с перенаправлением с использованием кода, предоставленного на #3 для перенаправления, но когда дело доходит до НАШИ сайт, использующий nuxtjs, вместо этого загружается пустой файл.

Любая помощь будет высоко оценен

флаг us
Вам вообще не нужно менять типы MIME для перенаправления. Вы уверены, что ваш `example.com.conf` имеет правильное `server_name`? Виден ли файл `example.com.conf` в выводе `nginx -T`?
Pc Monk avatar
флаг tm
Да, это видно в nginx -T. Я проверял это несколько раз (после каждого изменения). И я согласен с вами, изменение типа MIME не требуется, но стоило попробовать, чтобы он мог быть передан в php-fpm вместо загрузки
флаг us
Вы уверены, что IP-адрес в директиве listen правильный? Если адрес не совпадает, то nginx не будет использовать этот виртуальный хост.
Рейтинг:1
флаг tm

Я скопировал один из моих конфигов wordpress nginx и заменил ххх часть с доменное имя и гггг с IP-адрес сервера

сервер {
        слушать гггг.гггг.гггг.гггг:80;
        имя_сервера xxx.com www.xxx.com;
  вернуть 301 https://xxx$request_uri;

        место расположения / {
                try_files $uri $uri/ /index.php?$args;
                add_header Strict-Transport-Security "max-age=31536000";
                add_header X-XSS-Защита "1; режим = блок" всегда;
                add_header X-Content-Type-Options «нюхать» всегда;

                расположение ~.*\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
                        истекает макс.;
                }

                расположение ~ [^/]\.php(/|$) {
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        если (!-f $document_root$fastcgi_script_name) {
                                вернуть 404;
                        }

                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        включить /etc/nginx/fastcgi_params;
                }

        }

        location ~* "/\.(htaccess|htpasswd)$" {запретить все;вернуть 404;}


        отключить_символические ссылки, если_не_владелец from=/home/domainname/public_html;

        местоположение /.well-known/acme-challenge {
                default_type "текстовый/обычный";
                псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }

        местоположение /.well-known/pki-validation {
                default_type "текстовый/обычный";
                псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }
}

Он перенаправляется на https без загрузки чего-либо, я перемотал все изменения, которые я сделал для nginx и php-fpm, до их значений по умолчанию.

Теперь это работает, но почему?

после того, как поигрался, заметил изменение местоположения рабочего конфига nginx на расположение ~ \.php$ (тот, который я использовал раньше) заставит проблему вернуться. Вот и все!

Нет дальнейшего расследования, почему расположение ~ \.php$ делает НЕТ работать, но расположение ~ [^/]\.php(/|$) делает.

Надеюсь, это поможет.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.