Objetivo: Fornecer a configuração do servidor virtual Nginx para a operação do Bitrix-cms no pacote configurável Nginx + PHP-FPM. O que, entre outras coisas, também é adequado para o pacote Nginx + Apache2, com pequenas modificações.
Público-alvo: administradores de servidores, administradores avançados de sites, programadores.
Existem artigos suficientes sobre esse assunto, mas se você os considerar não oficiais, geralmente eles contêm erros, e os oficiais estão cheios de se não é aconselhável usar no Nginx. Espero que depois de postar essa configuração, o pacote Nginx + PHP-FPM se torne mais sério.
Aqui está a configuração oficial para o cache composto funcionar através do nginx.Vou mostrar a implementação do retorno do cache composto de arquivos. Em geral, o retorno com o memcached é feito por analogia. Na configuração de retorno do cache de arquivos, contei 11 ifs, dos quais me livrei refazendo-os no mapa.
Começarei com uma versão simplificada do CNC para aqueles que precisam apenas de um monte de Nginx + PHP-FPM sem retornar o cache composto via Nginx. Entende-se que a seção do servidor já está configurada, com nomes de domínio e envio para php-fpm.
location / { try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args; }
Não é de surpreender ao olhar para as telas que me apareceram, isso é suficiente para o Bitrix funcionar corretamente. Se você precisar de um redirecionamento de index.php e index.html para sem, ainda precisará adicionar esta linha:
if ($request_uri ~ ^(.*)/index.(html|php)) { return 301 $1/$is_args$args; }
Infelizmente, não há substituto digno se. Mas essa linha funciona sem criar problemas.
Exemplo de configuração minimalista 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; } }
Quero enfatizar que essa é uma configuração minimalista, sem regras para estática, compactação, e lá cobri apenas os arquivos de cache composto do acesso direto. A configuração que cobre certos lugares do acesso direto através do nginx é bastante individual. Eu tenho este kit que pode servir para alguém. Mas você precisa usá-lo cuidadosamente com consciência. Lembre-se de que a inserção de dados de localização em sua configuração pode levar à inoperabilidade do site ou parte de suas funções.
Um fragmento da configuração que bloqueia o acesso aos arquivos que devem estar disponíveis somente quando acessados pelo 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; }
E, claro, o exemplo de localização para arquivos estáticos
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)$ { access_log off; expires 97d; }
Agora vamos seguir para a configuração do composto para trabalhar com o retorno de arquivos de cache via nginx. Primeiro, é necessário determinar se é possível fornecer o cache composto para essa solicitação ou se ele precisa ser enviado para processamento através do php. Para fazer isso, no Nginx, na seção http, adicione alguns mapas e várias diretivas:
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 { default "1"; "~GET:::*https*" "1"; "~GET:::*:*:" ""; }
Em seguida, escrevemos diretamente na seção do servidor
set $i "index@"; location / { try_files /bitrix/html_pages/$host$uri$i${args}.html$usecache /bitrix/html_pages/$host$uri$i${args}=.html$usecache /bitrix/html_pages/$host$uri/$i${args}.html$usecache /bitrix/html_pages/$host$uri/$i${args}=.html$usecache $uri $uri/ /bitrix/urlrewrite.php$is_args$args; }
Bem, para entender como será a configuração mínima da seção do servidor aproximadamente
Exemplo de uma configuração minimalista com o retorno do cache composto de arquivos via nginx 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${args}.html$usecache /bitrix/html_pages/$host$uri$i${args}=.html$usecache /bitrix/html_pages/$host$uri/$i${args}.html$usecache /bitrix/html_pages/$host$uri/$i${args}=.html$usecache $uri $uri/ /bitrix/urlrewrite.php$is_args$args; } location ~* @.*\.html$ { internal; } }
Ficarei feliz em perguntas e sugestões em relação a esta configuração, bem como em alegria analisarei suas realizações.