Jump to content

Recommended Posts

Приветствую Всех! Заезженная тема, но никак не могу подружить opencart 3 Nginx php7.3 и seo url

Магазин обещает быть с большим кол-вом товаров, отсюда и идея делать на nginx не апаче. 

Вопрос: стоит ли игра свеч, нужен ли nginx или пользоваться апаче? Действительно ли апаче более тяжёлый и проигрывает в скорости? 

Просьба: помогите с конфигом. Перечитал весь гугл и по подобию пробовал дописывать в конфиг уже кучу "идей", но ЧПУ никак не работает (404)

Первоначальный вид конфига:

"

server {
    server_name shopoos.ru www.shopoos.ru;
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    return 301 https://$host:443$request_uri;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:80 default_server;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    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@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
server {
    server_name shopoos.ru www.shopoos.ru;
    ssl_certificate "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.crtca";
    ssl_certificate_key "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:443 ssl default_server;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    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@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
"

Ещё раз попрошу объяснить: нужен ли nginx для большого сайта или апаче? Все утверждают, что nginx быстрее но много заморочек... 

Заранее всем спасибо за ответы и помощь! 

Share this post


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

Приветствую Всех! Заезженная тема, но никак не могу подружить opencart 3 Nginx php7.3 и seo url

Магазин обещает быть с большим кол-вом товаров, отсюда и идея делать на nginx не апаче. 

Вопрос: стоит ли игра свеч, нужен ли nginx или пользоваться апаче? Действительно ли апаче более тяжёлый и проигрывает в скорости? 

Просьба: помогите с конфигом. Перечитал весь гугл и по подобию пробовал дописывать в конфиг уже кучу "идей", но ЧПУ никак не работает (404)

Первоначальный вид конфига:

"

server {
    server_name shopoos.ru www.shopoos.ru;
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    return 301 https://$host:443$request_uri;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:80 default_server;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    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@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
server {
    server_name shopoos.ru www.shopoos.ru;
    ssl_certificate "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.crtca";
    ssl_certificate_key "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:443 ssl default_server;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    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@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
"

Ещё раз попрошу объяснить: нужен ли nginx для большого сайта или апаче? Все утверждают, что nginx быстрее но много заморочек... 

Заранее всем спасибо за ответы и помощь! 

1. нужен

2. заморочек не много.

3. нет линейного прироста производительности. Если  у вас одна страница прибавила +100 мс, то и все остальные прибавят лишь 100, в процентном соотношении производительность не вырастет!

Share this post


Link to post
Share on other sites

Просто делюсь, что на моём хостинге (сравнивайте с .htaccess):

Спойлер

if ($http_host ~* "^www\.(.*)$"){
set $rule_0 1$rule_0;
set $bref_1 $1;
}
if ($rule_0 = "1"){
rewrite ^/(.*)$ https://$bref_1/$1 permanent;
}
rewrite ^/sitemap.xml$ /index.php?route=extension/feed/google_sitemap last;
rewrite ^/googlebase.xml$ /index.php?route=extension/feed/google_base last;
rewrite ^/sitemappro.xml$ /index.php?route=extension/feed/sitemap_pro last;
rewrite ^/yandexfeed.xml$ /index.php?route=extension/feed/yandex_feed last;
rewrite ^/system/download/(.*) /index.php?route=error/not_found last;
if (!-f $request_filename){
set $rule_6 1$rule_6;
}
if (!-d $request_filename){
set $rule_6 2$rule_6;
}
if ($uri !~ ".*\.(ico|gif|jpg|jpeg|png|js|css)"){
set $rule_6 3$rule_6;
}
if ($rule_6 = "321"){
rewrite ^/([^?]*) /index.php?_route_=$1 last;
}

 

 

.htaccess^

Спойлер

# Редиректы
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^sitemappro.xml$ index.php?route=extension/feed/sitemap_pro [L]
RewriteRule ^yandexfeed.xml$ index.php?route=extension/feed/yandex_feed [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

 

 

Share this post


Link to post
Share on other sites
5 часов назад, buslikdrev сказал:

Просто делюсь, что на моём хостинге (сравнивайте с .htaccess):

Не очень хороший пример. В одном из докладов сам автор nginx Сысоев И.В. говорил, что if надо использовать в самом крайнем случае, даже на оф. сайте есть статья If is evil.

Share this post


Link to post
Share on other sites
5 часов назад, lavrov2017 сказал:

Действительно ли апаче более тяжёлый и проигрывает в скорости?

Если грубо, то nginx лучше распараллеливает процессы, т.е. параллельно обрабатывает запросы он экономичнее и быстрее.

 

5 часов назад, lavrov2017 сказал:

Просьба: помогите с конфигом

Ну тут надо запускать nginx в режиме debug и уровень лога тоже делать debug и тогда прямо подробно будешь видеть какой location попадает запрос или не попадает и править. Одно могу точно сказать условия:

5 часов назад, snastik сказал:

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

точно лишнее, все запросы всеравно попадут в location / и там уже с помощью try_files можно сделать проверку

Share this post


Link to post
Share on other sites
Posted (edited)
7 hours ago, lavrov2017 said:

Заезженная тема, но никак не могу подружить opencart

да все просто. вот минимальный шаблон из трех локейшенов, которые обеспечат работу ЧПУ.

Spoiler

	# тут шапка конфига
	...
	
	location / {
		# тут может быть отдача статики или проверка на плохих ботов, например
		...
		try_files $uri $uri/ @opencart;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}

	# для работы ЧПУ
	location @opencart {
		rewrite ^/(.+)$ /index.php?_route_=$1 last;
	}
    
	location @php {
		# тут проксирование на бэкенд: апачи или php-fpm
		...
	}
	
	...
	# остальные локейшены и прочее

 

 

7 hours ago, lavrov2017 said:

Вопрос: стоит ли игра свеч, нужен ли nginx или пользоваться апаче? Действительно ли апаче более тяжёлый и проигрывает в скорости? 

выше уже писали - нужен.

nginx нужен как минимум что бы разгрузить тяжеловесный апачи от отдачи статического контента. так же он несколько экономичнее в потребляемых ресурсах. ну и конфиги более прозрачные\гибкие, в целом, если не брать в расчет некоторый геморрой в переводе правил из htaccess в конфиги nginx.

 

Nginx желательно иметь и большому и малому магазину. Либо перед апачи, либо перед php-fpm - какой-то прям космической разницы нет, при адекватных настройках.

Edited by 100napb
дполнил коментами конфиг

Share this post


Link to post
Share on other sites
12 часов назад, 100napb сказал:

да все просто. вот минимальный шаблон из трех локейшенов, которые обеспечат работу ЧПУ.

  Скрыть контент


	# тут шапка конфига
	...
	
	location / {
		# тут может быть отдача статики или проверка на плохих ботов, например
		...
		try_files $uri $uri/ @opencart;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}

	# для работы ЧПУ
	location @opencart {
		rewrite ^/(.+)$ /index.php?_route_=$1 last;
	}
    
	location @php {
		# тут проксирование на бэкенд: апачи или php-fpm
		...
	}
	
	...
	# остальные локейшены и прочее

 

 

выше уже писали - нужен.

nginx нужен как минимум что бы разгрузить тяжеловесный апачи от отдачи статического контента. так же он несколько экономичнее в потребляемых ресурсах. ну и конфиги более прозрачные\гибкие, в целом, если не брать в расчет некоторый геморрой в переводе правил из htaccess в конфиги nginx.

 

Nginx желательно иметь и большому и малому магазину. Либо перед апачи, либо перед php-fpm - какой-то прям космической разницы нет, при адекватных настройках.

 

Огромное спасибо! Сработало. По итогу вот такой конфиг получился, работает на opencart 3 php 7.3 nginx ))

 

server {
    server_name shopoos.ru www.shopoos.ru;
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    return 301 https://$host:443$request_uri;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:80 default_server;
    location / {
        try_files $uri $uri/ @opencart;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @opencart {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
server {
    server_name shopoos.ru www.shopoos.ru;
    ssl_certificate "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.crtca";
    ssl_certificate_key "/var/www/httpd-cert/ispshopoosadmin/shopoosSSL.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    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/shopoos.ru/*.conf;
    access_log /var/www/httpd-logs/shopoos.ru.access.log;
    error_log /var/www/httpd-logs/shopoos.ru.error.log notice;
    ssi on;
    set $root_path /var/www/ispshopoosadmin/data/www/shopoos.ru;
    root $root_path;
    listen 37.143.12.50:443 ssl default_server;
        location / {
        try_files $uri $uri/ @opencart;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @opencart {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@shopoos.ru";
        fastcgi_pass unix:/var/www/php-fpm/ispshopoosadmin.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

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.


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