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

Ребят

гуглил примеры и не нашел

подскажите пожалуйста как прописать 301 редирект в nigix страница site.com на site.com/en

Share this post


Link to post
Share on other sites
3 години назад, redolf сказав:

подскажите пожалуйста как прописать 301 редирект в nigix страница site.com на site.com/en

Уточните задачу иначе получите совсем не то, что хотите.

 

Вам нужно, чтоб главная страница редиректила с site.com на site.com/en или же вы хотите, чтоб, в принципе, все ссылки, у которых в начале нет /en редиректили на ссылку с /en? То есть, так: site.com/aaa -> site.com/en/aaa.

 

А второй вопрос: зачем? Это имеет смысл только, если у вас мультиязычный сайт и вы хотите, чтоб английский язык был дефолтным и идентификатор языка при этом всегда был в ссылке. И если у вас таки этот случай, это значит, что у вас кроме en бывают и другие идентификаторы языка в ссылках и тогда задача для условия редиректа меняется: вместо проверки отсутствия en нужно проверять отсутствие языковых идентификаторов, в принципе. Иначе у вас редиректы буду приводить, например, к таким ссылкам: site.com/en/ru.

Share this post


Link to post
Share on other sites

Я использую связку apache2 ( для статики и ЧПУ ) + nginx ( для динамики и картинок ) + opencart

Проблем не возникает.

 

Share this post


Link to post
Share on other sites
32 хвилини назад, Vorobiev сказав:

Проблем не возникает.

Как будет у вас товаров хотя бы тысяч 10 и магазин ляжет из-за "DDoS" от поисковых ботов, тогда то проблемы и возникнут :)

Хотя, если у вас неограниченный бюджет на хостинг, то можно и с Апачем жить.

 

35 хвилин назад, Vorobiev сказав:

apache2 ( для статики и ЧПУ ) + nginx ( для динамики и картинок )

Вы либо не понимаете что такое статика и динамика, либо у вас всё настроено вверх ногами.

Статика - это css, js и картинки. И вот эту статику в любом случае должен обрабатывать nginx!

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

 

Собственно, Апач в своё время так прижился именно потому, что его mod_php в те далёкие времена был единственным адекватным способом запускать php для веба. Но уже много лет существует php-fpm, который, во-первых, не нуждается ни в каком дополнительном софте для работы, а во-вторых, изначально разрабатывался в Badoo для решение их проблем с высокими нагрузками.

Share this post


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

Как будет у вас товаров хотя бы тысяч 10 и магазин ляжет из-за "DDoS" от поисковых ботов, тогда то проблемы и возникнут :)

Хотя, если у вас неограниченный бюджет на хостинг, то можно и с Апачем жить.

 

Вы либо не понимаете что такое статика и динамика, либо у вас всё настроено вверх ногами.

Статика - это css, js и картинки. И вот эту статику в любом случае должен обрабатывать nginx!

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

 

Собственно, Апач в своё время так прижился именно потому, что его mod_php в те далёкие времена был единственным адекватным способом запускать php для веба. Но уже много лет существует php-fpm, который, во-первых, не нуждается ни в каком дополнительном софте для работы, а во-вторых, изначально разрабатывался в Badoo для решение их проблем с высокими нагрузками.

Перепутал.Заработался

Share this post


Link to post
Share on other sites

У меня есть магазины на 30000 товаров и более и ниче.. Работают :)

Share this post


Link to post
Share on other sites
В 11.01.2021 в 13:43, Vorobiev сказав:

У меня есть магазины на 30000 товаров и более и ниче.. Работают :)

А какие характеристики сервера?

Share this post


Link to post
Share on other sites

Здравствуйте! Помогите пожалуйста настроить редиректы на nginx+php-fpm, а именно:

Редирект с ip адреса на домен;

Редирект на сайтмэп с языковым префиксом (ua/sitemap.xml - с этим конфигом сайтмэпы с языковым префиксом не отдаются даже через ua/index.php?route=extension/feed/google_sitemap_fast). ua/index.php?route работает только при добавлении 

if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?_route_=$1 last; }

, но не работает при этом /ua/sitemap.xml;

И правило на удаление лишних /// (почему-то только на главной странице они не удаляются, на остальных страницах все норм).

Вот мой конфиг, частично сгенерированый isp manager. Буду очень благодарен за помощь!

 

server {
	server_name site.com www.site.com;
	charset UTF-8;
	index index.php index.html;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/site.com/*.conf;
	access_log /var/www/httpd-logs/site.com.access.log;
	error_log /var/www/httpd-logs/site.com.error.log notice;
	ssi on;
	return 301 https://$host:443$request_uri;
	set $root_path /var/www/user/data/www/site.com;
	root $root_path;
	gzip on;
	gzip_vary on;
gzip_proxied any;
	gzip_comp_level 7;
gzip_buffers 16 8k;
gzip_min_length 256;
	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;
	proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
							 
	location / {
	
	try_files $uri $uri/ @opencart;
	
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}

    	location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|mp3|ogg|mpe?g|avi|woff2|webp)$ {
			expires 365d;
			log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
			try_files $uri $uri/ @fallback;
		}
		location ~* ^.+\.(js|css|zip|gz|bz2?|rar|swf)$ {
			expires 14d;
			log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
			try_files $uri $uri/ @fallback;
		}
		

	rewrite ^/sitemap.xml$ /index.php?route=extension/feed/google_sitemap_fast last;
	rewrite ^/ua/sitemap.xml$ /ua/index.php?route=extension/feed/google_sitemap_fast last;
	rewrite ^/en/sitemap.xml$ /en/index.php?route=extension/feed/google_sitemap_fast last;
    rewrite ^/googlebase.xml$ /index.php?route=feed/google_base last;
    rewrite ^/system/download/(.*) /index.php?route=error/not_found last;	
	}
		
 location @opencart { 
 rewrite ^/(.+)$ /index.php?_route_=$1 last; 
 }	
 
location ~* \.(engine|inc|info|ini|install|log|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}	
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
	
	listen 111.111.111.11:80 default_server;
	listen [2a05:470:0:f43a::2]:80 default_server;
	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/user.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}
server {
	server_name site.com www.site.com;
	ssl_certificate "/var/www/httpd-cert/user/site.com_le3.crtca";
	ssl_certificate_key "/var/www/httpd-cert/user/site.com_le3.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset UTF-8;
	index index.php index.html;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/site.com/*.conf;
	access_log /var/www/httpd-logs/site.com.access.log;
	error_log /var/www/httpd-logs/site.com.error.log notice;
	ssi on;
	set $root_path /var/www/user/data/www/site.com;
	root $root_path;
	gzip on;
	gzip_vary on;
gzip_proxied any;
	gzip_comp_level 7;
gzip_buffers 16 8k;
gzip_min_length 256;
	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;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;	
	
	location / {

	try_files $uri $uri/ @opencart;
	
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
		 
    	location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|mp3|ogg|mpe?g|avi|woff2|webp)$ {
			expires 365d;
			log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
			try_files $uri $uri/ @fallback;
		}
		location ~* ^.+\.(js|css|zip|gz|bz2?|rar|swf)$ {
			expires 14d;
			log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
			try_files $uri $uri/ @fallback;
		}
		
		 
	rewrite ^/sitemap.xml$ /index.php?route=extension/feed/google_sitemap_fast last;
	rewrite ^/ua/sitemap.xml$ /ua/index.php?route=extension/feed/google_sitemap_fast last;
	rewrite ^/en/sitemap.xml$ /en/index.php?route=extension/feed/google_sitemap_fast last;
    rewrite ^/googlebase.xml$ /index.php?route=feed/google_base last;
    rewrite ^/system/download/(.*) /index.php?route=error/not_found last;
	
	if ($host ~* www\.(.*)) {
    set $host_without_www $1;
    rewrite ^(.*)$ https://$host_without_www$1 permanent;
    }
	}
	
 location @opencart { 
 rewrite ^/(.+)$ /index.php?_route_=$1 last; 
 }	
 
location ~* \.(engine|inc|info|ini|install|log|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}


	add_header Strict-Transport-Security "max-age=31536000;";
	listen 111.111.111.11:443 ssl default_server http2;
	listen [2a05:470:0:f43a::2]:443 ssl default_server http2;
	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/user.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}

 

Share this post


Link to post
Share on other sites
15 годин назад, Radprox сказав:

rewrite ^/ua/sitemap.xml$ /ua/index.php?route=extension/feed/google_sitemap_fast last;

rewrite ^/en/sitemap.xml$ /en/index.php?route=extension/feed/google_sitemap_fast last;

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

 

Но с сайтмапом вам стоит начать с вопроса, а действительно ли вам нужен отдельный сайтмап для каждой языковой версии?

У Гугла есть рекомендации как указать ему на альтернативные языковые версии: https://developers.google.com/search/docs/advanced/crawling/localized-versions

Там сайтмап - это только один из вариантов. Но самое главное: Гугл говорит, что ему нужен 1 сайтмап со специальной разметкой, а не отдельный сайтмап на каждый язык!

Вот, что просит Гугл для сайтмапа:

Прихований текст
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>http://www.example.com/english/page.html</loc>
    <xhtml:link 
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
  <url>
    <loc>http://www.example.com/deutsch/page.html</loc>
    <xhtml:link 
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
  <url>
    <loc>http://www.example.com/schweiz-deutsch/page.html</loc>
    <xhtml:link 
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link 
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
</urlset>

 

 

 

 

15 годин назад, Radprox сказав:

Вот мой конфиг, частично сгенерированый isp manager.

Там можно выкинуть половину за ненадобностью.

В блоке server, который отвечает за редирект на https не нужно ничего кроме строк, которые перенаправляют все запросы на https. А у вас там полностью дублируется конфиг сайта.

Кстати, а у вас nginx не ругается на то, что сразу в двух блоках server у вас стоит директива default_server? Хотя, вероятно, вы этого всё равно не видите, если работаете через ISP Manager, а не консоль.

 

15 годин назад, Radprox сказав:

Редирект с ip адреса на домен;

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

Для начало убедитесь, что у вас default_server стоит только в основном блоке server.

Где-то в директории /etc/nginx или поддиректориях должен быть дефолтный конфиг, где тоже, вероятно, стоит default_server. Там тоже уберите.

 

Если такой вариант не сработает, тогда добавьте в блок server, который отвечает за редирект на https, в список доменов поддчёркивание:

server_name _ site.com www.site.com;

Оно отвечает за перехват всего, для чего нет отдельного блока server (на самом деле это просто "неправильный" домен, а не какая-то специальная директива, но оно приводит именно к перехвату всего).

А дефолтный конфиг вообще тогда отключите (добавьте подчёркивание в расширение файла: default.conf_). И переставьте default_server на этот блок server.

Share this post


Link to post
Share on other sites

@Dotrox Не мог бы глубокоуважаемый дон взглянуть на это и высказать свое мнение?

Спойлер

govnosite.ru.ssl.conf

 


#x# HTTPS-DEFAULT
 server {
   
   server_name govnosite.ru www.govnosite.ru;
   return 302 https://govnosite.ru$request_uri;
   include /usr/local/nginx/conf/staticfiles.conf;
 }

#       listen   80;
#       server_name govnosite.ru www.govnosite.ru;
#       return 302 https://$server_name$request_uri;

server {
  listen 443 ssl http2 reuseport;
  server_name govnosite.ru www.govnosite.ru;


  include /usr/local/nginx/conf/ssl/govnosite.ru/govnosite.ru.crt.key.conf;
  include /usr/local/nginx/conf/ssl_include.conf;

  # cloudflare authenticated origin pull cert community.centminmod.com/threads/13847/
  #ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/govnosite.ru/origin.crt;
  #ssl_verify_client on;
  http2_max_field_size 16k;
  http2_max_header_size 32k;
  # mozilla recommended
  ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
  ssl_prefer_server_ciphers   on;
  #add_header Alternate-Protocol  443:npn-spdy/3;

  # before enabling HSTS line below read centminmod.com/nginx_domain_dns_setup.html#hsts
  #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #spdy_headers_comp 5;
  ssl_buffer_size 1369;
  ssl_session_tickets on;

  # enable ocsp stapling
  resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
  resolver_timeout 10s;
  ssl_stapling on;
  ssl_stapling_verify on;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/govnosite.ru/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/govnosite.ru/log/error.log;

  include /usr/local/nginx/conf/autoprotect/govnosite.ru/autoprotect-govnosite.ru.conf;
  root /home/nginx/domains/govnosite.ru/public;
  # uncomment cloudflare.conf include if using cloudflare for
  # server and/or vhost site
  #include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;

  location / {
  include /usr/local/nginx/conf/503include-only.conf;

# block common exploits, sql injections etc
#include /usr/local/nginx/conf/block.conf;

  # Enables directory listings when index file not found
  #autoindex  on;

  # Shows file listing times as local time
  #autoindex_localtime on;

  # Wordpress Permalinks example
  #try_files $uri $uri/ /index.php?q=$uri&$args;


# OPENCART
try_files $uri @opencart;
  }

  include /usr/local/nginx/conf/pre-staticfiles-local-govnosite.ru.conf;
  include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  include /usr/local/nginx/conf/staticfiles.conf;
  include /usr/local/nginx/conf/php.conf;
  
  include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  include /usr/local/nginx/conf/vts_server.conf;

  include /usr/local/nginx/conf/opencart.conf;


}
 

 

Спойлер

opencart.conf

 

location ~* \/\.ht {         deny all;    }

location ~* (\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt) {         deny all;     }

location ~* \/\.git {        deny all;    }

location ~* \/image.+(\.php) {               deny all;    }

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {        expires max;        log_not_found off;    }

location = /sitemap.xml {        rewrite ^(.*)$ /index.php?route=extension/feed/google_sitemap last;    }

location = /googlebase.xml {        rewrite ^(.*)$ /index.php?route=extension/feed/google_base last;    }

location /system {        rewrite ^/system/storage/(.*) /index.php?route=error/not_found last;    }

#location = /favicon.ico {        log_not_found off;        access_log off;    }

#location = /robots.txt {        allow all;        log_not_found off;        access_log off;    }

location /admin {
index index.php;

    allow 127.0.0.1;
    allow *.*.*.*;
    deny  all;

limit_except GET {

    allow 127.0.0.1;
    allow *.*.*.*;
    deny  all;
}

}

#location / {try_files $uri @opencart;}

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

 

Share this post


Link to post
Share on other sites
Спойлер

 

Спасибо за ответ. @DotroxПравильно я убрал лишнее, или что-то еще нужно убрать?

11 часов назад, Dotrox сказал:

Если такой вариант не сработает, тогда добавьте в блок server, который отвечает за редирект на https, в список доменов поддчёркивание:

server_name _ site.com www.site.com;

Это не сработало для меня. Может еще какие-то варианты?  nginx/1.16.1

Edited by Radprox

Share this post


Link to post
Share on other sites

ВОт содержание файла /etc/nginx/nginx.conf

Спойлер


user www-data;
worker_processes  auto;
worker_rlimit_nofile 65000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  3072;
    multi_accept on;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
ssi_last_modified on;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  45;
 #gzip on;
 server_tokens off;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/vhosts/*/*.conf;
    client_max_body_size 600m;
    server {
        server_name localhost;
    disable_symlinks if_not_owner;
    include /etc/nginx/vhosts-includes/*.conf;
    location @fallback {
        error_log /dev/null crit;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect http://127.0.0.1:8080 /;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        access_log off ;
    }
    listen 80;
    listen [::]:80;
    }
}
 

 

Edited by Radprox

Share this post


Link to post
Share on other sites
Спойлер

server {
    server_name _ site.com www.site.com;
    charset UTF-8;
    index index.php index.html;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/site.com/*.conf;
    access_log /var/www/httpd-logs/site.com.access.log;
    error_log /var/www/httpd-logs/site.com.error.log notice;
    return 301 https://$host:443$request_uri;
    set $root_path /var/www/user/data/www/site.com;
    root $root_path;                         
    listen 111.11.111.11:80;
    listen [2f05:481:0:f45s::2]:80;

}
server {
    server_name site.com www.site.com;
    ssl_certificate "/var/www/httpd-cert/user/site.com_le3.crtca";
    ssl_certificate_key "/var/www/httpd-cert/user/site.com_le3.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    charset UTF-8;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/site.com/*.conf;
    access_log /var/www/httpd-logs/site.com.access.log;
    error_log /var/www/httpd-logs/site.com.error.log notice;
    ssi on;
    set $root_path /var/www/user/data/www/site.com;
    root $root_path;
    gzip on;
    gzip_vary on;
gzip_proxied any;
    gzip_comp_level 7;
gzip_buffers 16 8k;
gzip_min_length 256;
    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;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;    
    
    location / {

    try_files $uri $uri/ @opencart;
    
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
         
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|mp3|ogg|mpe?g|avi|woff2|webp)$ {
            expires 365d;
            log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
            try_files $uri $uri/ @fallback;
        }
        location ~* ^.+\.(js|css|zip|gz|bz2?|rar|swf)$ {
            expires 14d;
            log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
            try_files $uri $uri/ @fallback;
        }
        
         
    rewrite ^/sitemap.xml$ /index.php?route=extension/feed/google_sitemap_fast last;
    rewrite ^/googlebase.xml$ /index.php?route=feed/google_base last;
    rewrite ^/system/download/(.*) /index.php?route=error/not_found last;
    
    if ($host ~* www\.(.*)) {
    set $host_without_www $1;
    rewrite ^(.*)$ https://$host_without_www$1 permanent;
    }
    }
    
 location @opencart { 
 rewrite ^/(.+)$ /index.php?_route_=$1 last; 
 }
 
if (!-e $request_filename) { 
rewrite ^/(.*)$ /index.php?_route_=$1 last; 

}
location ~* \.(engine|inc|info|ini|install|log|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}


    add_header Strict-Transport-Security "max-age=31536000;";
    listen 111.11.111.11:443 ssl default_server http2;
    listen [2f05:481:0:f45s::2]:443 ssl default_server http2;
    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/user.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
 

Вот мой конфиг. @DotroxПравильно я убрал лишнее, или что-то еще нужно убрать?

Edited by Radprox

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.


  • 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.