Bitrix em um monte de Nginx + PHP-FPM, configurando o CNC, bem como um cache composto com feedback através do nginx. Configuração modificada

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.

Source: https://habr.com/ru/post/pt438604/


All Articles