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

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Всем привет. Купил домен, который ранее принадлежал другому человеку. От старого домена в индексе 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
 
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;
}

спасибо пожалуйста
 
Последнее редактирование:
добавил ещё 1 сервер
Код:
server {
    listen       myip:443;
    listen       my2ip:443;
    server_name _;

rewrite ^(.*) http://$host$1 permanent;
}

Но не работает((

Может тут как-то с return 301 Для просмотра ссылки Войди или Зарегистрируйся пытаться комбинировать?

nginx version: nginx/1.6.3
 
Ещё оказалось, что iptables блокирует 443 порт, добавил правило в iptables.
Но работоспособности все равно добиться не удалось...

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

Нагуглил ещё, что решить такую задачу вообще якобы невозможно Для просмотра ссылки Войди или Зарегистрируйся


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

Код:
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 прописываем свои пути.
 
А без сертификата решить эту проблему вообще никакого способа нет?
Если я куплю ещё, к примеру, 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;
}
 
А без сертификата решить эту проблему вообще никакого способа нет?
Нет.
Редирект срабатывает только после установки https соединения.

LetsEncrypt вроде никто ещё не отменял.
 
Поставьте бесплатный сертификат, по крону можно настроить автообновление, данных никаких не нужно от вас.
 
if ($scheme = https) { return 301 Для просмотра ссылки Войди или Зарегистрируйся }

схема должна сработать в секции сервера с листеном на 443

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