nginx

Вопросы без привязки к версии. Установлена авточистка (2 года).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

nginx

Сообщение Vlad__ » 05.02.2017 5:18

Имеется рабочий форум на стандартной связке lamp. Вычитал, что установка nginx перед апачем для статики дает выигрыш в скорости и улучшает защиту сайта от ддоса и прочего. Так ли это? Где можно почитать как установить nginx применительно к форуму phpbb и какие могут быть подводные камни?

Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Зарегистрирован: 13.03.2004 21:32
Откуда: СССР
Благодарил (а): 22 раза
Поблагодарили: 154 раза

Re: nginx

Сообщение Mr. Anderson » 05.02.2017 5:34

Vlad__ писал(а): Где можно почитать
Например в гугле :)

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4181
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 109 раз
Поблагодарили: 442 раза

Re: nginx

Сообщение Siava » 05.02.2017 15:17

Vlad__, лучше всего полностью избавиться от Apache и использовать nginx + php-fpm.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: nginx

Сообщение Vlad__ » 05.02.2017 15:20

Siava писал(а): лучше всего полностью избавиться от Apache и использовать nginx + php-fpm.
Это я понимаю. Но боюсь это делать на рабочем настроенном форуме, чтобы потом не вылавливать косяки. Да и пока не готов к этому умственно ;)
Может ткнете в мануал по настройке этой связки применительно к нашим форумам. Если есть такой. Со всеми возможными подводными камнями.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4181
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 109 раз
Поблагодарили: 442 раза

Re: nginx

Сообщение Siava » 05.02.2017 21:06

Vlad__, например, тут достаточно подробно описано.
Экспериментировать лучше на виртуалке (VirtualBox). Когда придёт осознание что к чему, то перенесёте на рабочий сервер.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

iks_
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 23.10.2016 15:20
Поблагодарили: 1 раз

Re: nginx

Сообщение iks_ » 05.02.2017 23:34

Стоит сразу учесть что о настройках через .htaccess придется сразу забыть. Сам давно отказался от Apache, всех нюансов настройке форума уже не припомню, но тут одну из проблем с которой столкнулся описал.
И так небольшие мелочи конечно, которые довольно легко решаются.

Приведу некоторые свои настройки nginx
Скрытый текст
nginx.conf

Код: Выделить всё

# forum
server {
    listen  80;
	listen *:443 ssl;
    server_name forum.site.ru www.forum.site.ru;
	include /etc/nginx/common/rewriteHTTPS;
	set $rootDir /home/user/public_html/site.ru/forum/;
	include /etc/nginx/common/sites;

    access_log  /home/user/logs/nginx-logs/forum.site.ru.access_log combined;
    error_log   /home/user/logs/nginx-logs/forum.site.ru.error_log;
}
/etc/nginx/common/rewriteHTTPS

Код: Выделить всё

# Если не защищенное соединение, перенаправляем на HTTPS
if ( $scheme = "http" ) {
	rewrite ^/(.*)$ https://$host/$1 permanent;
}
/etc/nginx/common/sites

Код: Выделить всё

# Кодировка по-умолчанию
charset utf-8;

# Включаем SSI
ssi on;

# Прочие настройки
client_max_body_size			100m;
client_body_buffer_size			128k;
client_header_timeout			3m;
client_body_timeout				3m;
send_timeout					3m;
client_header_buffer_size		1k;
large_client_header_buffers		4 16k;
# Блокируем Referrer-спам
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ) { return 403; }


#   Основной каталог
root $rootDir;

location / {
	root $rootDir;

	index index.shtml index.php index.html index.htm;

	#   Для  работы API
	rewrite ^/api/(.*)$ /api.php?_d=$1&ajax_custom=1&$args last;

	#   Логика поиска скрипта по порядку: файл, папка, скрипт
	try_files $uri $uri/ @fallback;
}

#   Правиле rewrite для модуля SEO
location @fallback {
	rewrite  ^(.*)$ /index.php?$args last;
}

#   Настройки статики, первое правило
location ~* \.(jpeg|ico|jpg|gif|png|css|js|pdf|txt|tar|gz|wof|csv|zip|xml|yml) {
	access_log off;
	#   Правило поиска статических файлов. Если файл не находится по адресу директории, то ищем файл по правилу @statics.
	try_files $uri @statics;
	expires 14d;
	add_header Access-Control-Allow-Origin *;
	add_header Cache-Control public;
	root $rootDir;
}

#   Правило поиска статических файлов для витрин. Например, если у Вас две витрины в разных подпапках: site.ru и site.ru/shop/
location @statics {
	rewrite ^/(\w+)/(.*)$ /$2 break;
	access_log off;
	rewrite_log off;
	expires 14d;
	add_header Cache-Control public;
	add_header Access-Control-Allow-Origin *;
	root $rootDir;
}

#   Обрабатываем PHP скрипты. Магия
location ~ \.php$ {
	root $rootDir;
	proxy_read_timeout 61;
	fastcgi_read_timeout 61;
	try_files $uri $uri/ =404;
	#   Путь до сокета демона PHP-FPM
	fastcgi_pass 127.0.0.1:9009;
#	fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_index index.php;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	include fastcgi_params;
}

#
#   Ограничиваем возвожность запуска php в каталогах. Для безопасности.
#

location /app/ {
	deny all;

	#   Разрешаем запуск скрипта обмена данными с 1С.
	location ^~ /app/addons/rus_exim_1c/exim_1c.php {
		allow all;
	}
}

#   Разрешаем запуск скриптов способов оплаты
location /app/payments/ {
	allow all;
}

#   Запрещаем PHP в папке /design
location /design/ {
allow all;
	location ~* \.([tT][pP][lL]|[pP][hH][pP].?)$ {
		deny all;
	}
	}

#   Запрещаем PHP в папке /images
location /images/ {
	allow all;
	location ~* \.([pP][hH][pP].?)$ {
		deny all;
	}
}

# Блокируй хотлинк
location ~* ^/img/(.+\.(jpg|jpeg|gif|png))$ {
	root $rootDir;
	valid_referers none blocked server_names ~\.site\.;
	if ($invalid_referer) {
		rewrite ^ img/zastavka.png last;
	}
}

#   Разрешаем только статику в папке /var
location /var/ {
	deny all;
	location ~* \.(js|css|png|jpg|gz|xml|yml)$ {
		allow all;
		expires 1M;
		add_header Cache-Control public;
		add_header Access-Control-Allow-Origin *;
	}
}

#   Закрываем доступ к бэкапам базы данных (папка /var/database/) с наружи
location /var/database/ {
	deny all;
}

#   Хранилище резервных копий шаблонов
location /var/skins_repository/ {
	allow all;
	location ~* \.([tT][pP][lL]|[pP][hH][pP].?)$ {
		deny all;
	}
}

#   Обработка API
location ~* api/ {
	rewrite ^/api/(.*)$ /api.php?_d=$1&ajax_custom=1&$args last;
}

#   Запрвещаем .htaccess и .htpasswd
location ~ /\.ht {
	deny  all;
}
Конечно не все вам пригодиться, но может что-то поможет...

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4181
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 109 раз
Поблагодарили: 442 раза

Re: nginx

Сообщение Siava » 06.02.2017 0:24

В папке docs форума есть пример конфига nginx применительно для phpbb.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
LONER
phpBB 3.0.0 RC1
Сообщения: 1486
Зарегистрирован: 24.01.2016 2:47
Благодарил (а): 164 раза
Поблагодарили: 257 раз

Re: nginx

Сообщение LONER » 06.02.2017 1:03

Siava писал(а): пример конфига nginx применительно для phpbb
Re: Вышел phpBB 3.2.0 RC2
Правильно заданный вопрос и описание проблемы - 70% их решения...

LBeaver
phpBB 1.4.4
Сообщения: 145
Зарегистрирован: 28.10.2014 21:06
Благодарил (а): 46 раз
Поблагодарили: 39 раз

Re: nginx

Сообщение LBeaver » 06.02.2017 10:35

iks_, перенаправление с HTTP на HTTPS сами разработчики рекомендуют делать через контекст server и вообще не советуют злоупотреблять директивой if (If Is Evil). Выглядит это примерно так:

Код: Выделить всё

server {
	listen 443 ssl;
	server_name example.ru;
	…
}

# Включаем переадресацию HTTP → HTTPS для одного сайта
server {
	server_name example.ru;
	return 301 https://example.ru$request_uri;
}

# Или переводим вообще все сайты на HTTPS
server {
	listen 80 default_server;
	return 301 https://$host$request_uri;
}

iks_
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 23.10.2016 15:20
Поблагодарили: 1 раз

Re: nginx

Сообщение iks_ » 06.02.2017 14:25

LBeaver ну если посмотрите приведенный мною скрипт, то увидите что он и сделан через server, обратите внимание на

Код: Выделить всё

include /etc/nginx/common/rewriteHTTPS;
Подгрузка файла сделана из server, да и остальные файлы, которые используются на разных сайтах, не во всех сайтах включается перенаправление, поэтому и сделан отдельный файл (есть свои нюансы у меня).
У меня nginx.conf разнесен по отдельным файлам для удобства, чтоб не писать один и тот-же код. Ну лентяй я что тут поделать ;)

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: nginx

Сообщение Vlad__ » 11.02.2017 0:13

Не подскажите какие параметры лучше выставить для форума с большим графическим контентом в виде картинок?
Сейчас стоят такие, но все равно периодически (прикручен fail2ban) банятся адреса 66.102.9.ХХХ (вроде Google) на обращениях по ссылкам к картинкам, хотя googlуbot пропускает. Я так понимаю нужно увеличить лимиты или прописать "безлимитный" диапазон адресов. Какие у гугла? И гугл ли это?

Код: Выделить всё

limit_req_zone $binary_remote_addr zone=dynamic:10m rate=10r/s;

Код: Выделить всё

limit_req zone=dynamic burst=15;
  limit_req_status 503;
  error_page 410 = @nolimit;
  if ($http_user_agent ~ Googlebot|YandexBot|bingbot|Baiduspider) {
  return 410;
  }

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4181
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 109 раз
Поблагодарили: 442 раза

Re: nginx

Сообщение Siava » 11.02.2017 0:37

Картинки и другую статику вовсе нет смысла ограничивать по запросам в секунду :roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: nginx

Сообщение Vlad__ » 11.02.2017 0:44

Siava писал(а): Картинки и другую статику вовсе нет смысла ограничивать по запросам в секунду :roll:
У меня и не ограничено. Картинки выдаются /download/file.php?id=$1; а это вроде не статика.

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: nginx

Сообщение Vlad__ » 02.06.2017 10:54

Вот мои конфиги нгинкса. Делалось методом научного тыка на основе примерного конфига в дистрибутиве форума 3.2. Уважаемые спецы, посмотрите пожалуйста - накосячил я или нет и что исправить и поправить? Все в принципе работает, только проблемы с сохранением ббкодов в админке - выбрасывает еррор 502.

myforum.com.conf

Код: Выделить всё

server {
    listen 443 ssl;
    server_name myforum.com;

    # certs sent to the client in handshake are concatenated in ssl_certificate
    ssl_certificate /etc/letsencrypt/live/myforum.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myforum.com/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # secure configuration
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers on;

    expires     epoch;   

    root /var/www/myforum.com;
    index index.php index.html index.htm index.nginx-debian.html;

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

    # For extension SEO Images in Attachment.
    rewrite ^/thumb/(\d+)\.(gif|jpg|jpeg|bmp|png|tiff|tif|tga)$ /download/file.php?id=$1&t=1;
    rewrite ^/pic/(\d+)\.(gif|jpg|jpeg|bmp|png|tiff|tif|tga)$ /download/file.php?id=$1&mode=view;
    rewrite ^/inline/(\d+)\.(gif|jpg|jpeg|bmp|png|tiff|tif|tga)$ /download/file.php?id=$1;
    rewrite ^/img/(\d+)\.(gif|jpg|jpeg|bmp|png|tiff|tif|tga)$ /download/file.php?id=$1; 

    if ($request_uri ~ "^/index.(php|html?)") {
    rewrite ^ /$1 permanent;
    }

    if (!-e $request_filename){ 
    rewrite ^(.*)$ /app.php break; 
    } 

    # Antibot
    if ($http_user_agent ~* "InAGist|naver|Livelapbot|Slurp|wordpress|FlipboardProxy|SemrushBot|SolomonoBot|AhrefsBot|SearchBot|magpie|urllib|peerindex|Configuration|Kimengi|Subscribe|Crowsnest|Jakarta|crawler|findlinks|Browserlet|Java|LibreOffice|QuerySeekerSpider|Powermarks|CodeGator|xpymep|MJ12bot|Butterfly|UnwindFetchor|JS-Kit|rogerbot|MetaURI|NING|PaperLiBot|facebookexternalhit|ia_archiver|Slingstone|linkfluence|uMBot|Twitterbot|TweetmemeBot") {
    return 403;
    }

    location / {
    try_files $uri $uri/ =404;
    limit_req zone=dynamic burst=10;
    limit_req_status 503;
    error_page 410 = @nolimit;
    }

    location ~* \.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ {
        expires 4M;
        add_header Cache-Control public;
    } 

    location ~* \.(css|js|ico) {
        expires 2M;
        add_header Cache-Control private;
    }

    # Deny access to internal phpbb files.
    location ~ /(config\.php|common\.php|includes|cache|files|store|images/avatars/upload|ext/bb3mobi/imgposts/images) {
        deny all;
        # deny was ignored before 0.8.40 for connections over IPv6.
        # Use internal directive to prohibit access on older versions.
        internal;
    }

    # Pass the php scripts to fastcgi server specified in upstream declaration.
    location ~ \.php(/|$) {
        # Unmodified fastcgi_params from nginx distribution.
        include fastcgi_params;
        # Necessary for php.
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_cache MYCACHE; 
        fastcgi_cache_valid 200 4h;
        try_files $uri $uri/ /app.php$is_args$args;
        fastcgi_pass php;   
   }

    # Correctly pass scripts for installer
    location /install/ {
        # phpBB uses index.htm
        try_files $uri $uri/ @rewrite_installapp;
        # Pass the php scripts to fastcgi server specified in upstream declaration.
        location ~ \.php(/|$) {
        # Unmodified fastcgi_params from nginx distribution.
        include fastcgi_params;
        # Necessary for php.
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        try_files $uri $uri/ /install/app.php$is_args$args;
        fastcgi_pass php;
     }
   }

    location @rewrite_installapp {
        rewrite ^(.*)$ /install/app.php/$1 last;
   }

    # Deny access to version control system directories.
    location ~ /\.svn|/\.git {
        deny all;
        internal;
   } 

    location ~ /\.ht {
        deny all;
   }

}

upstream php {
        server unix:/var/run/php/php7.1-fpm.sock;
       }

nginx.conf

Код: Выделить всё

user              www-data    www-data;

worker_processes  auto;

worker_priority   -10;

pid /var/run/nginx.pid;

error_log  /var/log/nginx/error.log  warn;


events {
    worker_connections              2048;
    accept_mutex                    on;
    multi_accept                    on;
}

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

    reset_timedout_connection       on;
    server_tokens                   off;

    log_format                      main            '$remote_addr - [$time_local] '
                                                    '$host "$request" $status $bytes_sent '
                                                    '"$http_referer" "$http_user_agent" '
                                                    '"$gzip_ratio" $upstream_response_time';

    sendfile                        on;
    tcp_nopush                      on;
    tcp_nodelay                     on;

    keepalive_timeout               65;

    client_max_body_size            512m;

    server_names_hash_max_size      1024;
    server_names_hash_bucket_size   128;

    port_in_redirect                off;

    
    gzip                            on;
    gzip_static                     on;
    gzip_vary                       on;
    gzip_http_version               1.1;
    gzip_min_length                 700;
    gzip_comp_level                 6;
    gzip_disable                    "MSIE [1-6]\.";

    charset                         utf-8;
    index                           index.php index.html index.htm;

    access_log                      off;

    error_log                       /dev/null;

    set_real_ip_from               100.100.100.100/32;  
    real_ip_header                 X-Real-IP;
 
    limit_conn_zone $binary_remote_addr zone=perip:10m;    limit_conn perip 100;
    limit_conn_status 503;

    limit_req_zone $binary_remote_addr zone=dynamic:10m rate=10r/s;

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

}

cache.conf

Код: Выделить всё

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:10m inactive=4h;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2181
Зарегистрирован: 16.12.2007 14:01
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз

Re: nginx

Сообщение nissin » 02.06.2017 12:47

Vlad__,
По мелочи, рекомендую включить http2
https://nginx.org/ru/docs/http/ngx_http_v2_module.html
и проверить наличие поддержки ALPN (OpenSSL версии 1.0.2).

по общей настройке https:
https://mozilla.github.io/server-side-t ... generator/
Всё повторяется. nurlan.info

Вернуться в «phpBB-пространство»