apache2+nginx вопрос перед переходом

DiWorm

Проверенные
Сообщения
440
Реакции
142
Баллы
5,545
Доброго дня!
Вопрос не совсем на тематику ксена, но я все же попробую :)


Решил от скуки(да, именно с этого начинается великая жопа, хотя по большому счету - пора, т.к. ВДСка у меня крайне бюджетная и я плавно приближаюсь к порогу оперативки) переходить на связку с фронт - nginx и бэк - apache2.

Для себя выбрал гайды:





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

Единственное, что я пока понял, это то, что придется заменить mod_rewrite апача на nginx? верно ли это? Если так, то по какому принципу в дальнейшем для каждого отдельной директории делать настройку .htaccess?

Также, судя по тому, что я видел, переделка моего корневого .htaccess сайта будет выглядеть так:

apache
Код:
ErrorDocument 404 https://example/404
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
nginx
Код:
# nginx configuration
 error_page 404 https://example/404;
 autoindex off;
 location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php break; } }
(использовал )

Но, это как я понимаю делается в настройках хоста.. А как же быть например с .htaccess форума который лежит в example/forum/?

Что еще посоветуете?
 
Что еще посоветуете?
Использовать if в данном случае - порочная практика. Есть более . (см try_files, антиреффер вырезает линк, падла)
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
превращается в
Код:
 try_files $uri $uri/ /index.php?$uri&$args;

А как же быть например с .htaccess форума который лежит в example/forum/?
Сам форум находится в example/forum/?
Тогда
Код:
 location /forum/ {
            index index.php index.html index.htm;
            try_files $uri $uri/ /forum/index.php?$uri&$args;
        }
 
Последнее редактирование:
Использовать if в данном случае - порочная практика. Есть более . (см try_files, антиреффер вырезает линк, падла)
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
превращается в
Код:
 try_files $uri $uri/ /index.php?$uri&$args;


Сам форум находится в example/forum/?
Тогда
Код:
 location /forum/ {
            index index.php index.html index.htm;
            try_files $uri $uri/ /forum/index.php?$uri&$args;
        }
Спасибо за объяснение, а как насчет тех статей что я привел выше? Нормальные ли они или стоит что-то учесть дополнительно (из опыта, так сказать)?
 
Не глянул что слазишь с апача на nginx + apache, подумал что апач глобально на nginx меняешь.
Будешь ставить nginx перед апачем - вообще .htaccess не трогай, он будет работать как надо.
Все просто. Ставишь nginx, заводишь в конфиге server, локейшен с регуляркой под раздачу статики, все остальное - на апач, он разберется.
Т.е. 404-ю отправлять на бэкэгд. Ну или рерайты можно перекинуть на nginx, по примеру с try_files выше.
 
  • Мне нравится
Реакции: Hope
Не глянул что слазишь с апача на nginx + apache, подумал что апач глобально на nginx меняешь.
Будешь ставить nginx перед апачем - вообще .htaccess не трогай, он будет работать как надо.
Все просто. Ставишь nginx, заводишь в конфиге server, локейшен с регуляркой под раздачу статики, все остальное - на апач, он разберется.
Т.е. 404-ю отправлять на бэкэгд. Ну или рерайты можно перекинуть на nginx, по примеру с try_files выше.
ну, а с другой стороны - как лучше? чистый nginx или связкой? еще не ясно с сслем что делать, какбы апач понятно, меняем порт с 80 на 8080 и перенаправляем nginx на него, а с ssl - таже схема?
 
См живой пример, только апач перевесить на 127.0.0.1:8080, это уже не показываю

Код:
server {
    listen      1.1.1.1:80;
    server_name test.com www.test.com;
    error_log  /var/log/nginx/test.com.error.log error;
    access_log /var/log/nginx//test.com.log combined;
    location / {
        proxy_pass      http://127.0.0.1:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mp4|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/testvb/web/test.com/public_html;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location @fallback {
        proxy_pass      http://127.0.0.1:8080;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
}

Ну и дописать SSL

ну, а с другой стороны - как лучше? чистый nginx или связкой?
Это зависит больше от способа запуска php, сколько скатертей в .htaccess, специфических апачевских модулей и вообще, кому-то рулить через htaccess тупо удобней, чем разбираться в портянках nginx. Главное статику на nginx отдать, вот это будет ощутимо.
 
См живой пример, только апач перевесить на 127.0.0.1:8080, это уже не показываю

Код:
server {
    listen      1.1.1.1:80;
    server_name test.com www.test.com;
    error_log  /var/log/nginx/test.com.error.log error;
    access_log /var/log/nginx//test.com.log combined;
    location / {
        proxy_pass      http://127.0.0.1:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mp4|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/testvb/web/test.com/public_html;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location @fallback {
        proxy_pass      http://127.0.0.1:8080;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
}

Ну и дописать SSL


Это зависит больше от способа запуска php, сколько скатертей в .htaccess, специфических апачевских модулей и вообще, кому-то рулить через htaccess тупо удобней, чем разбираться в портянках nginx. Главное статику на nginx отдать, вот это будет ощутимо.
а что насчет новой моды на lighthttpd ? не в курсе?
 
а что насчет новой моды на lighthttpd ? не в курсе?
В курсе. Лайти ставили еще в те времена, когда ngixn был маленький, под раздачу статики. Довольно быстро работает с php, но конфигурация довольно экзотична, особенно под сложные правила, хотя не сложная.

На одном сервере почти 5 лет назад конфигурил в последний раз - работает и не жужит. А что еще надо.
2015-10-21_204339.png
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу