Не получается сделать редирект с https на http в nginx

Тема в разделе "Администрирование серверов", создана пользователем verfaa, 19 мар 2019.

Метки:
Модераторы: mefish
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    387
    Симпатии:
    47
    Всем привет. Купил домен, который ранее принадлежал другому человеку. От старого домена в индексе google присутствуют страницы с https.
    Сайт, который хочу залить на этот домен работает на http, поэтому мне нужно сделать редирект при заходе на страницу с https на http. Перерыл интернет, перепробовал кучу вариантов - не работает.

    Вот мой конфиг nginx:

    Код:
        user nginx;
        worker_processes auto;
        error_log /var/log/nginx/error.log;
        pid /run/nginx.pid;
       
        events {
            worker_connections 1024;
        }
       
        http {
            access_log off;
       
            sendfile            on;
            tcp_nopush          on;
            tcp_nodelay         on;
            keepalive_timeout   65;
            types_hash_max_size 2048;
            client_max_body_size 10M;
       
            include             /etc/nginx/mime.types;
            default_type        application/octet-stream;
       
            include /etc/nginx/conf.d/*.conf;
       
       
        server {
            listen       myip:80;
            server_name .mysite12.com;
       
            location / {
                root   /home/site12;
                index  index.php;
        if ($scheme = https) {
            return 301 http://$host$request_uri;
        }
                if (!-e $request_filename) {
                       rewrite ^ /index.php last;
                       break;
                }
            }
       
            location ~ \.php$ {
                root           /home/site12;
                try_files $uri =404;
                fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
            }
        }
       
       
        }
    
    Добавил

    Код:
        
    if ($scheme = https) {
            return 301 http://$host$request_uri;
        }
    
    как мне кажется самый логичный вариант, но не работает...
    Помогите сделать редирект с http на https
     
  2. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    535
    Симпатии:
    543
    listen myip:80;
    Потому и не работает.
    Нужна ещё одна секция сервер с
    listen myip:443;
    и тут тулить редирект с https на http.

    Код:
    server {
        listen              *:443 ssl;
        server_name         example.com;
        ssl_certificate     /etc/ssl/certs/example.com.cert;
        ssl_certificate_key /etc/ssl/private/example.com.key;
        return 301 http://$server_name$request_uri;
    }
    спасибо пожалуйста
     
    Последнее редактирование: 19 мар 2019
  3. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    387
    Симпатии:
    47
    добавил ещё 1 сервер
    Код:
    server {
        listen       myip:443;
        listen       my2ip:443;
        server_name _;
    
    rewrite ^(.*) http://$host$1 permanent;
    }
    
    Но не работает((

    Может тут как-то с return 301 http://$http_host$request_uri; пытаться комбинировать?

    nginx version: nginx/1.6.3
     
  4. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    387
    Симпатии:
    47
    Ещё оказалось, что iptables блокирует 443 порт, добавил правило в iptables.
    Но работоспособности все равно добиться не удалось...

    Chrome пишет:
    Код:
    This site can’t provide a secure connection
    ERR_SSL_PROTOCOL_ERROR

    Нагуглил ещё, что решить такую задачу вообще якобы невозможно https://ru.stackoverflow.com/questi...-https-на-http-после-удаления-ssl-сертификата


    Может решение какое-нибудь есть??? Есть у нас на форуме спецы по nginx?
     
  5. mefish

    mefish Support

    Moderator
    • Супермодератор
    Регистр.:
    30 авг 2007
    Сообщения:
    908
    Симпатии:
    649
    Да потому что сертификата нету:

    Код:
    server {
        listen       myip:443;
        listen       my2ip:443;
        server_name _;
    
    #### SSL ####
    
      ssl  on;
      ssl_certificate  /etc/ssl/cert.pem;
      ssl_certificate_key  /etc/ssl/cert.key;
    
    ### END ###
    
    rewrite ^(.*) http://$host$1 permanent;
    }

    В ssl_certificate и ssl_certificate_key прописываем свои пути.
     
  6. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    387
    Симпатии:
    47
    А без сертификата решить эту проблему вообще никакого способа нет?
    Если я куплю ещё, к примеру, 100 дропов на https, то всем придется сертификаты покупать и прописывать отдельную секцию server для каждого домена в nginx.conf?
    Код:
    
    #### 100 таких секций не будут сильно тормозить VPS?? ####
    server {
        listen       myip:443;
        listen       my2ip:443;
        server_name _;
    
    #### SSL ####
    
      ssl  on;
      ssl_certificate  /etc/ssl/cert.pem;
      ssl_certificate_key  /etc/ssl/cert.key;
    
    ### END ###
    
    rewrite ^(.*) http://$host$1 permanent;
    }
    
     
  7. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    535
    Симпатии:
    543
    Нет.
    Редирект срабатывает только после установки https соединения.

    LetsEncrypt вроде никто ещё не отменял.
     
  8. eburon

    eburon Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    101
    Симпатии:
    5
    Поставьте бесплатный сертификат, по крону можно настроить автообновление, данных никаких не нужно от вас.
     
  9. stelz66

    stelz66 Создатель

    Регистр.:
    16 апр 2012
    Сообщения:
    28
    Симпатии:
    2
    схема должна сработать в секции сервера с листеном на 443

    и не забываем сделать типа так: для firefox - там ищем историю, свой сайт и - забыть об этом сайте, как то так, просто скорей всего браузер уже сам автоматом на 443 кидает