Jump to content

Recommended Posts

Здравствуйте. Переехал на новое железо, выбрал связку nginx + php fpm. 

Не хватает знаний по настройке редиректов на www+https и каждому домену задать строго свою директорию, так как несколько доменов работают на 1-м IP.

 

Кто владеет секретной информацией и готов поделиться ею за ₽? Пишите в лс сколько будут стоить ваши знания.

 

пс выбор связки прошу не обсуждать, вернее можете, но где нибудь в курилке и к известным членам этого сообщества не посылать - я пришел от них.

 

Ппс гуглил, пробовал разные варианты редиректа, но что-то не помогает. 

Share this post


Link to post
Share on other sites

Вопрос решил, если кому понадобиться решение.

 

редирект на https 

return 301 https://www.domen.ru$request_uri;

 

Редирект на www

if ($host = domen.ru) {
        rewrite ^(.*) https://www.domen.ru$request_uri? permanent;
    }
 

Перезапустить nginx (Shell: service nginx restart)

 

Share this post


Link to post
Share on other sites
В 24.02.2017 в 15:29, magneto2010 сказал:

Редирект на www

if ($host = domen.ru) {
        rewrite ^(.*) https://www.domen.ru$request_uri? permanent;
    }

 

У вас непонятно, что и куда (в какой блок?) писать. Да и if не нужен.

 Последнее время нас приучили набирать название сайта без WWW (это и будет основной алиас), у вас же обратная ситуация (характерно лишь для очень старых сайтов).

 

Нужно для редиректа использовать два блока server (в файле конфигурации nginx для домена) для редиректа. третий блок server будет основным (настройка ЧПУ, php и т. д.), предыдущие только для редиректа.

 

Например, редирект с WWW на "без WWW" и на https из http:


 

server {
    server_name exemple.ru www.exemple.ru;
    listen 46.99.99.99:80;   # IP вашего домена, порт не меняем
    return 301 https://exemple.ru$request_uri;
}

server {
    server_name www.exemple.ru;
    listen 46.99.99.99:443;   # IP вашего домена, порт не меняем
    ssl on;
    ssl_certificate "/*******.crtca";   # здесь соответственно путь до вашего сертификата, ispmanager заполняет самостоятельно
    ssl_certificate_key "/*****.key"; # путь до ключа соответственно
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    return 301 https://exemple.ru$request_uri;
}

server {
    server_name exemple.ru;

    listen 46.99.99.99:443;   # IP вашего домена, порт не меняем
    ssl on;

    ***  #  здесь все остальное для вашего домена по протоколу https

   ***

}

 

 

Share this post


Link to post
Share on other sites
2 часа назад, sitecreator сказал:

Последнее время нас приучили набирать название сайта без WWW (это и будет основной алиас), у вас же обратная ситуация (характерно лишь для очень старых сайтов).

 

нас этого кого? у меня были домены без www, сейчас перевёл все на www - старость? Да нет, просто подражаю большинству популярных магазинов, авторитетным ресурсам да и просто как по мне солидней выглядит. ИМХО.

 

Если ли какое-то ярко-выраженное преимущество? не стану утверждать ибо невежд в этом, но если большинство ведущих интернет площадок используют это, значит есть сок в чём-то? (риторический вопрос)

 

За конфиг спасибо.

Share this post


Link to post
Share on other sites
26 минут назад, magneto2010 сказал:

 

нас этого кого? у меня были домены без www, сейчас перевёл все на www - старость? Да нет, просто подражаю большинству популярных магазинов, авторитетным ресурсам да и просто как по мне солидней выглядит. ИМХО.

 

Если ли какое-то ярко-выраженное преимущество? не стану утверждать ибо невежд в этом, но если большинство ведущих интернет площадок используют это, значит есть сок в чём-то? (риторический вопрос)

 

За конфиг спасибо.

Сейчас все будут переделывать" визитки" потому как солиднее

 

https://site.com

:mrgreen:

Share this post


Link to post
Share on other sites
1 час назад, magneto2010 сказал:

просто подражаю большинству популярных магазинов, авторитетным ресурсам да и просто как по мне солидней выглядит. ИМХО.

 

ну так это старые монстры.

было время когда деревья... интернет был медленный и сайты начинались только с WWW.  Сейчас есть тенденция упрощать жизнь пользователям, т. е. давать возможность набирать более короткие названия.  Долой лишнюю информацию! Ее и так много в нашей жизни.

А, вообще, у вас браузер неправильный.  :)  Правильный показывает без www

 

03a025cfb8.jpg

 

1 час назад, magneto2010 сказал:

если большинство ведущих интернет площадок используют это, значит есть сок в чём-то?

 

www.mvideo.ru? Домены то еще в прошлом веке созданы. Естественно, что им переход нежелателен как доменам со старой репутацией.

 

А для новых доменов можно делать как нравится.  Принципиальной разницы нет абсолютно никакой.

Но в адресной строке уже никто не набирает "www",  рудимент этот "www" по сути своей для старых сайтов. А для новых это атавизм.

Ни хуже ни лучше от него, просто лишний "орган".

 

Да, и всякие техносилы с мвидео не спешат переходить на https.

 

В общем, спорить здесь бессмысленно - дело вкуса и не более.

Share this post


Link to post
Share on other sites

Да, из полезного.

В основную секцию server нужно добавить вот это:

 

location / {
        
    try_files $uri @opencart; }
    location @opencart { rewrite ^/(.+)$ /index.php?_route_=$1 last; }

Это нужно для того чтобы работали ЧПУ. Не забываем, что .htaccess для nginx не существуют, они только для апаче.

 

Также не забываем, что по умолчанию в nginx вы лишены http-авторизации, и, следовательно, некоторые полезные вещи не будут работать. Например, модули обмена данными по протоколу 1С.

 

Что нужно для этого сделать я написал для случаев любых конфигураций серверов здесь: https://opencartforum.com/topic/72591-visnet-apach/

Share this post


Link to post
Share on other sites

 

1 час назад, sitecreator сказал:

 

 

03a025cfb8.jpg

 

 

Вы бы для интереса покликали по этим ссылкам :)

 

У меня не работает почему-то ваш конфиг. Я нуб, в настройках nginx.

 

Накалупал методом гуглопроб следующую рабочую конфигурацию.

 

Был бы признателен, если сильны в этом, дать совет по улучшению/сокращению имеющегося кода

 

Скрытый текст

server {
    server_name domen.ru www.domen.ru;
    return 301 https://www.domen.ru$request_uri;
    charset UTF-8;
    index index.php;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/domen.ru/*.conf;
    access_log /var/www/httpd-logs/domen.ru.access.log;
    error_log /var/www/httpd-logs/domen.ru.error.log notice;
    ssi on;
    set $root_path /var/www/domen2017/data/www/domen.ru;
    root $root_path;
    listen айпи.47.95:80;
    rewrite ^/sitemap.xml$ /index.php?route=feed/google_sitemap last;
    rewrite ^/googlebase.xml$ /index.php?route=feed/google_base last;
    rewrite ^/download/(.*) /index.php?route=error/not_found last;
    if (!-f $request_filename) {
        set $rule_3 1$rule_3;
    }
    if (!-d $request_filename) {
        set $rule_3 2$rule_3;
    }
    if ($uri !~ ".*.(ico|gif|jpg|jpeg|png|js|css)") {
        set $rule_3 3$rule_3;
    }
    if ($rule_3 = "321") {
        rewrite ^/([^?]*) /index.php?_route_=$1 last;
    }
    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    expires 15d;
    location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/domen2017.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
server {
    server_name www.domen.ru;
    ssl on;
    ssl_certificate "/var/www/httpd-cert/domen2017/domen17.crt";
    ssl_certificate_key "/var/www/httpd-cert/domen2017/domen17.key";
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    charset UTF-8;
    index index.php;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/domen.ru/*.conf;
    access_log /var/www/httpd-logs/domen.ru.access.log;
    error_log /var/www/httpd-logs/domen.ru.error.log notice;
    ssi on;
    set $root_path /var/www/domen2017/data/www/domen.ru;
    root $root_path;
    listen айпи.47.95:443;
    if ($host = domen.ru) {
        rewrite ^(.*) https://www.domen.ru$request_uri? permanent;
    }
    rewrite ^/sitemap.xml$ /index.php?route=feed/google_sitemap last;
    rewrite ^/googlebase.xml$ /index.php?route=feed/google_base last;
    rewrite ^/download/(.*) /index.php?route=error/not_found last;
    if (!-f $request_filename) {
        set $rule_3 1$rule_3;
    }
    if (!-d $request_filename) {
        set $rule_3 2$rule_3;
    }
    if ($uri !~ ".*.(ico|gif|jpg|jpeg|png|js|css)") {
        set $rule_3 3$rule_3;
    }
    if ($rule_3 = "321") {
        rewrite ^/([^?]*) /index.php?_route_=$1 last;
    }
    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    expires 15d;
    location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/domen2017.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}

 

Edited by magneto2010

Share this post


Link to post
Share on other sites
10 минут назад, magneto2010 сказал:

Вы бы для интереса покликали по этим ссылкам :)

 

думаете, что я их не видел? :)

Я  четко выше написал, что они именно с www (сами домены), да и причину указал.  Просто Яндекс, как я понимаю, идет по пути убирания лишней информации.

В любом случае тут спорить не о чем - дело вкуса, не более.

 

15 минут назад, magneto2010 сказал:

Был бы признателен, если сильны в этом, дать совет по улучшению/сокращению имеющегося кода

 

а зачем у вас в блоке server, в котором есть редирект на https присутствует обработка php, gzip и прочее?  До них ведь дело не дойдет, редирект ведь. Этот блок только для редиректа и нужен. Смотрите мои блоки для server.

 

Ну и if многовато у вас.  Можно и без них. Полезно также иметь редирект с "/index.php" на "/".   Это так, если бегло.

И где у вас редирект  на www с "без www"? Он у вас реально работает на сайте?

 

Также любопытно было бы узнать почему решили от Апаче отказаться?

Есть немало скептиков такого перехода. Я сам для себя не могу пока дать однозначный ответ насчет nginx.  Есть желание помониторить ситуацию на конкретном проекте, а дальше уже сделать вывод. Но как минимум пока для себя сделал вывод, что хуже не станет. Отрицательные моменты применительно для Опенкарт мне неизвестны пока.

 

Потенциально положительные моменты, но которые в Опенкарт (дефолтном) пока не используются, я вижу. Опять же плюсы могут проявиться именно при большой загруженности.

  • +1 1

Share this post


Link to post
Share on other sites

Вот такой код - это наследие Апача (образа мышления из его конфигов).:

if (!-f $request_filename) {
        set $rule_3 1$rule_3;
    }
    if (!-d $request_filename) {
        set $rule_3 2$rule_3;
    }
    if ($uri !~ ".*.(ico|gif|jpg|jpeg|png|js|css)") {
        set $rule_3 3$rule_3;
    }
    if ($rule_3 = "321") {
        rewrite ^/([^?]*) /index.php?_route_=$1 last;
    }

 

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

А во-вторых, это всё в nginx делается через секции location, которые, по сути, тоже условные операторы с проверкой пути.

 

Чтоб отправить к ОК только запросы, для которых не существует статических файлов или директории, достаточно вместо этого полотнища условий одного блока:

location / {		
	    try_files $uri $uri/ @opencart;
	}

Почти то же самое, что выше уже выложил @sitecreator , но с одной небольшой правкой - $uri/. Таким образом nginx сначала попытается найти файл ($uri), потом директорию ($uri/) и если ничего не найдёт, передаст запрос дальше в блок @opencart.

 

 

  • +1 2

Share this post


Link to post
Share on other sites

У яндекса просто стиль выдачи другой, пока...

 Редирект этот

if ($host = domen.ru) {
        rewrite ^(.*) https://www.domen.ru$request_uri? permanent;
    }

 

Скептики и консерваторы есть и будут - как-то наткнулся на тему обсуждения только выпущенного Opencart 2 и "репистые" "тянули мазу" за 15512, но время прошло, технологии двигаются вперёд и консервные банки понемногу открываются.

 

У меня 2 поддерживаемых мной магазина с 20К+ товаром + фильтр + подсчёт кол-ва товаров.

С Apache+php5.4 были фризы при передвижению, сейчас nginx+ php-fpm на php5.6 - магазины стали ощутимей работать быстрее.  Конечно, возможно этому результату также поспособствовало повышение версии php, но пока хочу жить в неведении + к тому же, люблю читать :) , говорят большинство успешных ресурсов,в том числе магазинов, используют именно эту связку. Насколько я понял алгоритм работы обоих систем - nginx, ИМХО  должна справляться быстрее с задачами.

 

 

Спасибо @sitecreator и @Dotrox

 

Edited by magneto2010

Share this post


Link to post
Share on other sites
2 минуты назад, magneto2010 сказал:

как-то наткнулся на тему обсуждения только выпущенного Opencart 2 и "репистые" "тянули мазу" за 15512

 

Это плохой пример. Версия 2.0 была мёртворождённой, такое должно было быть стыдно называть релизом, оно даже на бету не сильно тянуло.

 

 

5 минут назад, magneto2010 сказал:

Конечно, возможно этому результату также поспособствовало повышение версии php

 

Разница между 5.4 и 5.6 не такая кардинальная, чтоб её можно было хорошо заметить невооружённым глазом. В рамках пятёрки основной скачёк был между 5.3 и 5.4, а дальше уже достаточно заметный - на семёрку.

 

 

9 минут назад, magneto2010 сказал:

Редирект этот

 

И это тоже наследие Апача :) Если вы пишите $request_uri, то регулярка уже не нужна (и даже добавляет лишней работы).

 

Достаточно так:

if ($host = 'domain.ru') {      
        return 301 https://www.domain.ru$request_uri;
    }

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By arki
      Всем привет
      У нас идентичная проблема, как в приложенной теме, 1-1.
      1. При включенном seopro не работает поиск, а именно почему то сивмолы %88 заменяются подчеркиванием, см скрин
      2. В настройках магазина указано окончание для чпу .html, автогенератор чпу при этом все равно везде добавляет второй .html

       
      nginx 1.16.1
      php-fpm 7.1
      MySQL 5.7.3
      opencart 2.3
       
      Нужно пофиксить обе проблемы, не за бесплатно, договоримся.
    • By fduw
      Не могу сделать редирект ROUT'а
       
       
      rewrite ^/en/index.php?route=common/footer/getOctPolicy$ https://SITE.com/index.php?route=common/footer/getOctPolicy permanent;
       
      Т.е /en/index.php?route=common/footer/getOctPolicy на без(/en) https://SITE.com/index.php?route=common/footer/getOctPolicy
       
      Не работает у меня почему-то
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.