MSE на nginx+php-fpm

Coilfenix

Ветеран
Сообщения
84
Реакции
30
Ну собственно необходима помощь за копеечку, разумеется. Поставил LEMP на Ubuntu 18.04 (мускул 5.7, php 7.2), все как положено, поставил скрипт MSE, но работает только главная, при переходе по категориям(жанрам) и тд, выдает 404 ошибку. Предполагаю, что проблема в реврайтах. Кто ставил MSE на чистый nginx отзовитесь, подскажите.
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
Код:
AddDefaultCharset utf-8

Options +FollowSymLinks
Options All -Indexes
DirectoryIndex index.php
ErrorDocument 404 /404/

RewriteEngine On

# Бан "плохих" ботов для снижения нагрузки на сервер
RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|MJ12bot|DotBot|BUbiNG\ Crawler|BUbiNG|FaceBook\ Crawler|FaceBook|SemrushBot|LinkdexBot|Alexa\ Robot|Alexa|Ads.txt-crawler|Powermarks|GrapeshotCrawler|grapeshot|SimplePie|360Spider|CCBot|SeznamBot|LinkpadBot|BLEXBot) [NC]
RewriteRule .* - [R=403,L]

# Обратная совместимость со старыми страницами
RewriteRule ^pages/(.*)$ /page/$1 [L,R=301]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
RedirectMatch 403 ^/cache/

# API админ панели
RewriteRule ^admin/api/(.*) /adminko/?act=api&api=$1 [NS,L]
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
nginx/nginx.conf
Код:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#    # auth_http localhost/auth.php;
#    # pop3_capabilities "TOP" "USER";
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#    server {
#        listen     localhost:110;
#        protocol   pop3;
#        proxy      on;
#    }
#
#    server {
#        listen     localhost:143;
#        protocol   imap;
#        proxy      on;
#    }
#}
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
в nginx/sites-available/default
Код:
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name yourmusic.cc;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
    #
    #    # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    #    # With php-cgi (or other tcp sockets):
    #    fastcgi_pass 127.0.0.1:9000;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#    listen 80;
#    listen [::]:80;
#
#    server_name example.com;
#
#    root /var/www/example.com;
#    index index.html;
#
#    location / {
#        try_files $uri $uri/ =404;
#    }
#}
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
Ан нет, все верно там, где думал. Тогда уж рассчитываю только на Вашу помощь.
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
NGINX:
if ($http_host ~* "^www.(.*)$"){
set $rule_2 1$rule_2;
set $bref_1 $1;
}

if ($rule_2 = "1"){
rewrite ^/(.*)$ http://$bref_1/$1 permanent;
}

if (!-f $request_filename){
set $rule_3 1$rule_3;
}

if (!-d $request_filename){
set $rule_3 2$rule_3;
}

if ($rule_3 = "21"){
rewrite /.* /index.php last;
}

rewrite ^/pages/(.*)$ /page/$1 permanent;
rewrite ^/admin/api/(.*) /adminko/?act=api&api=$1 last;
rewrite ^/sitemap.xml$ /sitemap.xml last;
Вариант конфига от пользователя. На работоспособность не проверялся.
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
NGINX:
if ($http_host ~* "^www.(.*)$"){
set $rule_2 1$rule_2;
set $bref_1 $1;
}

if ($rule_2 = "1"){
rewrite ^/(.*)$ http://$bref_1/$1 permanent;
}

if (!-f $request_filename){
set $rule_3 1$rule_3;
}

if (!-d $request_filename){
set $rule_3 2$rule_3;
}

if ($rule_3 = "21"){
rewrite /.* /index.php last;
}

rewrite ^/pages/(.*)$ /page/$1 permanent;
rewrite ^/admin/api/(.*) /adminko/?act=api&api=$1 last;
rewrite ^/sitemap.xml$ /sitemap.xml last;
Вариант конфига от пользователя. На работоспособность не проверялся.
То что нужно, все заработало, спасибо!
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
NGINX:
if ($http_host ~* "^www.(.*)$"){
set $rule_2 1$rule_2;
set $bref_1 $1;
}

if ($rule_2 = "1"){
rewrite ^/(.*)$ http://$bref_1/$1 permanent;
}

if (!-f $request_filename){
set $rule_3 1$rule_3;
}

if (!-d $request_filename){
set $rule_3 2$rule_3;
}

if ($rule_3 = "21"){
rewrite /.* /index.php last;
}

rewrite ^/pages/(.*)$ /page/$1 permanent;
rewrite ^/admin/api/(.*) /adminko/?act=api&api=$1 last;
rewrite ^/sitemap.xml$ /sitemap.xml last;
Вариант конфига от пользователя. На работоспособность не проверялся.
Почитал документацию по nginx, вообщем некоторые правки сделал:
Редирект лучше делать не через if, а через назначение определение отдельного сервера
Код:
server {    listen       80;    server_name  www.example.com;    return       301 http://example.com$request_uri; }

server {    listen       80;    server_name  www.example.com;    ... }
Затем
Код:
if (!-f $request_filename){

set $rule_3 1$rule_3;

}



if (!-d $request_filename){

set $rule_3 2$rule_3;

}



if ($rule_3 = "21"){

rewrite /.* /index.php last;

}
вообще хрень полная, правильно прописать вот так:
Код:
try_files $uri $uri/ /index.php;
При чем прописывает под location / {} и смотрите, чтобы не было его дублей, а то ошибку выдаст. После изменений не забывайте проверять конфиг на наличие ошибок через nginx -t

Изучаю дальше документацию, потом мб напишу по остальным реврайтам.
 
Последнее редактирование:

Coilfenix

Ветеран
Сообщения
84
Реакции
30
Бан левых ботов под nginx:
Код:
if ($http_user_agent ~* "(AhrefsBot|MJ12bot|DotBot|BUbiNG\ Crawler|BUbiNG|FaceBook\ Crawler|FaceBook|SemrushBot|LinkdexBot|Alexa\ Robot|Alexa|Ads.txt-crawler|Powermarks|GrapeshotCrawler|grapeshot|SimplePie|360Spider|CCBot|SeznamBot|LinkpadBot|BLEXBot)") {
    return 403;
}
 

Andrey

Местный житель
Клиент
Сообщения
36
Реакции
3
@Coilfenix, А можешь полностью готовый конфиг nginx скинуть?
Тоже скидывали конфиг выше, но у меня так и заработало.
 

Andrey

Местный житель
Клиент
Сообщения
36
Реакции
3
Опечатка "но у меня так и не заработало."
 

Coilfenix

Ветеран
Сообщения
84
Реакции
30
Может и заработает у тебя:D У меня в принципе работает все, кроме: не добавляет ключи в базу и косяки с созданием карты сайта. А так все остальное норм.
 
Сверху