Objectif: fournir la configuration du serveur virtuel Nginx pour le fonctionnement de Bitrix-cms dans le bundle Nginx + PHP-FPM. Ce qui, entre autres, convient également au bundle Nginx + Apache2, avec des modifications mineures.
Public cible: administrateurs de serveur, administrateurs de site avancés, programmeurs.
Il y a suffisamment d'articles sur ce sujet, mais si vous les regardez non officiels, ils contiennent généralement des erreurs, et les articles officiels sont pleins s'ils ne sont pas recommandés à utiliser dans Nginx. J'espère qu'après avoir posté cette configuration, le bundle Nginx + PHP-FPM deviendra plus sérieux.
Voici la configuration officielle pour que le cache composite fonctionne via nginx.Je vais montrer l'implémentation du retour de cache composite de fichier. En général, memcached renvoie par analogie. Dans la configuration de retour du cache de fichiers, j'ai compté 11 ifs, dont je me suis débarrassé en les refaisant sur la carte.
Je vais commencer par une version simplifiée de la CNC pour ceux qui ont juste besoin d'un tas de Nginx + PHP-FPM sans retourner le cache composite via Nginx. Il est entendu que la section serveur est déjà configurée, avec les noms de domaine et la soumission à php-fpm.
location / { try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args; }
Il n'est pas surprenant de regarder les toiles qui me sont parvenues, cela suffit pour que Bitrix fonctionne correctement. Si vous avez besoin d'une redirection depuis index.php et index.html vers sans, alors vous devez toujours ajouter cette ligne:
if ($request_uri ~ ^(.*)/index.(html|php)) { return 301 $1/$is_args$args; }
Malheureusement, il n'y a pas de remplacement digne si. Mais cette ligne fonctionne sans créer de problèmes.
Exemple de configuration minimaliste 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; } }
Je tiens à souligner qu'il s'agit d'une configuration minimaliste sans règles de statique, de compression, et je n'ai couvert que les fichiers de cache composite à partir d'un accès direct. La configuration qui couvre certains endroits depuis l'accès direct via nginx est assez individuelle. J'ai ce kit qui pourrait convenir à quelqu'un. Mais vous devez l'utiliser avec prudence et conscience. Gardez à l'esprit que la saisie de données de localisation dans votre configuration peut entraîner une inopérabilité du site ou une partie de ses fonctions.
Un fragment de la configuration bloquant l'accès aux fichiers qui ne devraient être disponibles que lorsqu'ils sont accessibles depuis 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; }
Et bien sûr l'exemple d'emplacement pour les fichiers statiques
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; }
Passons maintenant à la configuration pour que le composite fonctionne avec le retour des fichiers de cache via nginx. Tout d'abord, il est nécessaire de déterminer s'il est possible de donner le cache composite à cette requête ou s'il doit être envoyé pour traitement via php. Pour ce faire, dans Nginx, dans la section http, ajoutez quelques cartes, ainsi que plusieurs directives:
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:::*:*:" ""; }
Ensuite, nous écrivons directement dans la section serveur
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; }
Eh bien, pour comprendre à quoi ressemblera la configuration minimale de la section serveur
Exemple de configuration minimaliste avec retour du cache composite de fichiers 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; } }
Je serai heureux de questions et suggestions concernant cette config, ainsi que pour la joie je regarderai vos réalisations.