Перейти к содержанию

Рекомендуемые сообщения

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

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

редирект на 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)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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

   ***

}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, sitecreator сказал:

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
26 минут назад, magneto2010 сказал:

 

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

 

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

 

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

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

 

https://site.com

:mrgreen:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, magneto2010 сказал:

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

 

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

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

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

 

03a025cfb8.jpg

 

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

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

 

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

 

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В основную секцию 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/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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 webmaster@domen.ru";
        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 webmaster@domen.ru";
        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;
    }
}

 

Изменено пользователем magneto2010

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, magneto2010 сказал:

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

 

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

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

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

 

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

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

 

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

 

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

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

 

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

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

 

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

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Изменено пользователем magneto2010

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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;
    }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.