Битрикс urlrewrite php nginx

sokolenkoDEV / bitrix-nginx-php-fpm.conf

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

server
listen 127.0.0.1:80;
ssi on;
gzip on;
gzip_comp_level 7;
gzip_types application/x-javascript application/javascript text/css;
server_name test.ru www.test.ru;
charset off;
#disable_symlinks if_not_owner from=$root_path;
index index.php;
root $root_path;
set $root_path /var/www/www-user/data/www/test;
set $php_sock unix:/var/www/php-fpm/www-user.sock;
access_log /var/www/httpd-logs/west-test.ru.access.log;
error_log /var/www/httpd-logs/west-test.ru.error.log notice;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 1024M;
client_body_buffer_size 4M;
#кому не надо убирать у домена www это не пишем. между http:// и test.ru убрать пробел, парсер дурит 🙂
if ($host = ‘www.test.ru’ )
rewrite ^(.*)$ http://test.ru$1 permanent;
>
location /
try_files $uri $uri/ @bitrix;
>
location ~* /upload/.*\.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)$
types
text/plain text/plain php php3 php4 php5 php6 phtml pl asp aspx cgi dll exe ico shtm shtml fcg fcgi fpl asmx pht py psp rb var;
>
>
location ~ \.php$
try_files $uri @bitrix;
fastcgi_pass $php_sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE «sendmail_path = /usr/sbin/sendmail -t -i -f admin@west-test.ru»;
include fastcgi_params;
>
location @bitrix
fastcgi_pass $php_sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
fastcgi_param PHP_ADMIN_VALUE «sendmail_path = /usr/sbin/sendmail -t -i -f admin@west-test.ru»;
>
location ~* /bitrix/admin.+\.php$
try_files $uri @bitrixadm;
fastcgi_pass $php_sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE «sendmail_path = /usr/sbin/sendmail -t -i -f admin@west-test.ru»;
include fastcgi_params;
>
location @bitrixadm
fastcgi_pass $php_sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/admin/404.php;
fastcgi_param PHP_ADMIN_VALUE «sendmail_path = /usr/sbin/sendmail -t -i -f admin@west-test.ru»;
>
location = /favicon.ico
log_not_found off;
access_log off;
>
location = /robots.txt
allow all;
log_not_found off;
access_log off;
>
#
# block this locations for any installation
#
# ht(passwd|access)
location ~* /\.ht
# repositories
location ~* /\.(svn|hg|git)
# bitrix internal locations
location ~* ^/bitrix/(modules|local_cache|stack_cache|managed_cache|php_interface)
deny all;
>
# upload files
location ~* ^/upload/1c_[^/]+/
# use the file system to access files outside the site (cache)
location ~* /\.\./
location ~* ^/bitrix/html_pages/\.config\.php
location ~* ^/bitrix/html_pages/\.enabled
# Intenal locations
location ^~ /upload/support/not_image
# Cache location: composite and general site
location ~* @.*\.html$
internal;
# disable browser cache, php manage file
expires -1y;
add_header X-Bitrix-Composite «Nginx (file)»;
>
# Player options, disable no-sniff
location ~* ^/bitrix/components/bitrix/player/mediaplayer/player$
add_header Access-Control-Allow-Origin *;
>
# Accept access for merged css and js
location ~* ^/bitrix/cache/(css/.+\.css|js/.+\.js)$
expires 30d;
error_page 404 /404.html;
>
# Disable access for other assets in cache location
location ~* ^/bitrix/cache
# Use nginx to return static content from s3 cloud storage
# /upload/bx_cloud_upload/…amazonaws.com/
location ^~ /upload/bx_cloud_upload/
location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:]+)\.(s3|s3-us-west-1|s3-eu-west-1|s3-ap-southeast-1|s3-ap-northeast-1)\.amazonaws\.com/(.+)$
internal;
resolver 8.8.8.8;
proxy_method GET;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Server $host;
#proxy_max_temp_file_size 0;
proxy_pass $1://$2.$3.amazonaws.com/$4;
>
location ~* .*$
>
# Static content
location ~* ^/(upload|bitrix/images|bitrix/tmp)
expires 30d;
>
location ~* \.(css|js|gif|png|jpg|jpeg|ico|ogg|ttf|woff|eot|otf)$
error_page 404 /404.html;
expires 30d;
>
location = /404.html
access_log off ;
>
>

Источник

Битрикс в связке Nginx+PHP-FPM, настройка ЧПУ, а так же композитный кэш с отдачей через nginx. Доработанная конфигурация

Цель: Предоставить конфигурацию виртуального сервера Nginx для работы Битрикс-cms в связке Nginx+PHP-FPM. Который в прочем подойдёт и для связки Nginx+Apache2, с небольшими доработками.

Целевая аудитория: Администраторы серверов, продвинутые администраторы сайтов, программисты.

Cтатей на эту тему достаточно, но если смотреть не официальные, то там как правило содержатся ошибки, а в официальных полно if которые в Nginx использовать не желательно. Надеюсь после того как я выложу данный конфиг к связке Nginx+PHP-FPM станут относиться серьёзнее.

Я покажу реализацию отдачи файлового композитного кэша. В целом отдача с memcached делается по аналогии. В конфигурации отдачи файлового кэша я насчитал 11 if, от которых я и избавился переделав их на map.

Начну с упрощённого варианта ЧПУ для тех кому нужна просто связка Nginx+PHP-FPM без отдачи композитного кэша через Nginx. Подразумевается что секция server уже настроена, с доменными именами и передачей в php-fpm.

Как не удивительно смотря на те полотна конфигов которые мне попадались, этого достаточно чтобы битрикс корректно заработал. Если нужен редирект с index.php и index.html на без, то нужно ещё дописать вот эту строку:

if ($request_uri ~ ^(.*)/index.(html|php)) < return 301 $1/$is_args$args; >

К сожалению тут достойной замене if нет. Но данная строчка работает не создавая проблем.

server < listen 80; server_name site.ru; root /var/www/site.ru/; index index.php; location ~ \.php$ < include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; >if ($request_uri ~ ^(.*)/index.(html|php)) < return 301 $1/$is_args$args; >location / < try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args; >location ~* @.*\.html$ < internal; >>

Хочу подчеркнуть что это именно минималистичная конфигурация без правил для статики, сжатия, и я там прикрыл только файлы композитного кэша от прямого доступа. Конфигурация которая прикрывает определённые места от прямого доступа через nginx довольно индивидуальна. У меня есть вот такой набор который может кому-то подойти. Но использовать нужно аккуратно с осознанием дела. Учитите что внесение данных локейшенов в свою конфигурацию может привести к неработоспособности сайта или части его функций.

Фрагмент конфига закрывающий доступ к файлам которые должны быть доступны только при обращении из PHP

location ~ \.php$ < location ~* /\.\./ < internal; >location ~ /\.[^/]+$ < internal; >location ~* ^/upload/1c_[^/]+/ < internal; >location ~* ^/(bitrix/(cache|images|tmp)|upload)/ < internal; >location ~* ^/bitrix/(footer|header|license_key)\.php$ < internal; >location ~* ^/(bitrix|local)/components/(.*)/(.*)/(class|component)\.php$ < internal; >location ~* ^/(bitrix|local)/(backup|blocks|bx_cloud_upload|local_cache|module|modules|managed_cache|php_interface|public|stack_cache)/ < internal; >include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; > location ~* \.(hg|svn|git|bzr)$ < internal; >location ~* /\.\./ < internal; >location ~* @.*\.html$ < internal; >location / < location ~* ^/(bitrix|local)/(backup|blocks|bx_cloud_upload|local_cache|module|modules|managed_cache|php_interface|public|services|stack_cache)/ < internal; >location ~ /\.[^/]+$ < internal; >location ~* ^/upload/1c_[^/]+/ < internal; >try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args; >

Ну и конечно пример location для статических файлов

location ~* \.(jpg|jpeg|png|tiff|gif|webp|xml|html|yml|ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|rtf|pdf|txt|js|css|bmp|pnm|pbm|ppm)$

Теперь перейдём к конфигу для работы композита с отдачей файлов кэша через nginx. Первым делом необходимо определить можно ли отдавать данному запросу композитный кэш или его нужно отправить на обработку через php. Для этого в Nginx в секции http добавим несколько map, а так же несколько директив:

modern_browser_value "modern"; modern_browser msie 10.0; modern_browser unlisted; map "$cookie_BITRIX_SM_LOGIN:$cookie_BITRIX_SM_UIDH:$cookie_BITRIX_SM_CC" $storedAuth < default ""; "~*:*:Y" ""; "~*:*:*" 1; "~*:*:" 1; >map "$request_method:$http_bx_action_type:$cookie_BITRIX_SM_NCC:$http_x_forwarded_scheme:$modern_browser:$storedAuth" $usecache

Далее уже непосредственно в секции server прописываем

 set $i "index@"; location / < try_files /bitrix/html_pages/$host$uri$i$.html$usecache /bitrix/html_pages/$host$uri$i$=.html$usecache /bitrix/html_pages/$host$uri/$i$.html$usecache /bitrix/html_pages/$host$uri/$i$=.html$usecache $uri $uri/ /bitrix/urlrewrite.php$is_args$args; >

Ну и для понимания как примерно будет выглядеть минимальная конфигурация секции server

server < listen 80; server_name site.ru; root /var/www/site.ru/; index index.php; location ~ \.php$ < include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; >if ($request_uri ~ ^(.*)/index.(html|php)) < return 301 $1/$is_args$args; >set $i "index@"; location / < try_files /bitrix/html_pages/$host$uri$i$.html$usecache /bitrix/html_pages/$host$uri$i$=.html$usecache /bitrix/html_pages/$host$uri/$i$.html$usecache /bitrix/html_pages/$host$uri/$i$=.html$usecache $uri $uri/ /bitrix/urlrewrite.php$is_args$args; > location ~* @.*\.html$ < internal; >>

Буду рад вопросам и предложениям по поводу данного конфига, а так же за радость посмотрю Ваши наработки.

Источник

Читайте также:  Соседние селекторы
Оцените статью