И вновь про config nginx php-fpm.

InstantCMS 2.X

Просьба создать шаблон для vestacp.

#1 4 апреля 2020 в 23:33
Обнаружил в vestacp интересную настройку.
При выборе в качестве web-сервера php-fpm, в настройках сайта можно выбрать шаблон для разных CMS.
Если раньше мне приходилось каждый раз дописывать в конфиг nginx в location одну строку
try_files $uri $uri/ /index.php?$args;
то теперь я просто выбираю конфиг для joomla и всё работает. И не слетает каждый раз при обновлении сертификата SSL.
Вот шаблон конфига для джумлы:
  1. server {
  2. listen %ip%:%web_port%;
  3. server_name %domain_idn% %alias_idn%;
  4. root %docroot%;
  5. index index.php index.html index.htm;
  6. access_log /var/log/nginx/domains/%domain%.log combined;
  7. access_log /var/log/nginx/domains/%domain%.bytes bytes;
  8. error_log /var/log/nginx/domains/%domain%.error.log error;
  9.  
  10. location / {
  11. try_files $uri $uri/ /index.php?$args;
  12.  
  13. location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
  14. expires max;
  15. }
  16.  
  17. # deny running scripts inside writable directories
  18. location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
  19. return 403;
  20. error_page 403 /403_error.html;
  21. }
  22.  
  23. location ~ [^/]\.php(/|$) {
  24. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  25. if (!-f $document_root$fastcgi_script_name) {
  26. return 404;
  27. }
  28.  
  29. fastcgi_pass %backend_lsnr%;
  30. fastcgi_index index.php;
  31. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  32. include /etc/nginx/fastcgi_params;
  33. }
  34. }
  35.  
  36. error_page 403 /error/404.html;
  37. error_page 404 /error/404.html;
  38. error_page 500 502 503 504 /error/50x.html;
  39.  
  40. location /error/ {
  41. alias %home%/%user%/web/%domain%/document_errors/;
  42. }
  43.  
  44. location ~* "/\.(htaccess|htpasswd)$" {
  45. deny all;
  46. return 404;
  47. }
  48.  
  49. location /vstats/ {
  50. alias %home%/%user%/web/%domain%/stats/;
  51. include %home%/%user%/conf/web/%domain%.auth*;
  52. }
  53.  
  54. include /etc/nginx/conf.d/phpmyadmin.inc*;
  55. include /etc/nginx/conf.d/phppgadmin.inc*;
  56. include /etc/nginx/conf.d/webmail.inc*;
  57.  
  58. include %home%/%user%/conf/web/nginx.%domain%.conf*;
  59. }
  60.  
Если кто-нибудь сможет создать подобный шаблон для InstantCMS — я мог бы предложить включить его в следующий релиз разработчикам Весты.
Разработчики весты — вполне адекватные люди, всегда откликаются на запросы пользователей и вряд ли будут против расширения функционала своей web-панели.
И для InstantCMS наличие шаблона настроек для самой популярной web-панели будет только на пользу.
#2 5 апреля 2020 в 10:57
В фрагмент
# deny running scripts inside writable directories
должны быть включены директории static, upload, возможно, ещё какие-то. Ненужные удалены.

В строке
error_page 403 /error/404.html;
ошибка. Должно быть 403.html
И я так понимаю 404. 403. 500… страницы предоставляет панель?

В этом конфиге нет секции
# Hide text files
Для файлов credits.txt, readme.txt, license.(.*).txt
#3 5 апреля 2020 в 20:35
@IamB,
Наваял что-то этакое:
  1. server {
  2. listen %ip%:%web_port%;
  3. server_name %domain_idn% %alias_idn%;
  4. root %docroot%;
  5. index index.php index.html index.htm;
  6. access_log /var/log/nginx/domains/%domain%.log combined;
  7. access_log /var/log/nginx/domains/%domain%.bytes bytes;
  8. error_log /var/log/nginx/domains/%domain%.error.log error;
  9.  
  10. location / {
  11. try_files $uri $uri/ /index.php?$args;
  12.  
  13. location ~* ^.+\.(jpeg|jpg|png|webp|gif|bmp|ico|svg|css|js)$ {
  14. expires max;
  15. }
  16.  
  17. # deny running scripts inside writable directories
  18. location ~* /(cache|static|upload)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
  19. return 403;
  20. error_page 403 /403_error.html;
  21. }
  22.  
  23. location ~ [^/]\.php(/|$) {
  24. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  25. if (!-f $document_root$fastcgi_script_name) {
  26. return 404;
  27. }
  28.  
  29. fastcgi_pass %backend_lsnr%;
  30. fastcgi_index index.php;
  31. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  32. include /etc/nginx/fastcgi_params;
  33. }
  34.  
  35. location /cache {
  36. location ~* \.(js|css|xml)$ {
  37. allow all;
  38. }
  39. deny all;
  40. }
  41.  
  42. location /static {
  43. fastcgi_param PHP_FLAG "engine=on";
  44. }
  45.  
  46. location /system {
  47. deny all;
  48. }
  49.  
  50. location /templates {
  51. location ~ \.(js|css|scss|xml|png|gif|jpg|jpeg|ico|bmp|map|eot|svg|ttf|woff|woff2)$ {
  52. allow all;
  53. }
  54. }
  55.  
  56. location /upload {
  57. fastcgi_param PHP_FLAG "engine=on";
  58. }
  59.  
  60. location /wysiwyg {
  61. autoindex off;
  62. }
  63.  
  64. location /.htaccess {
  65. return 403;
  66. }
  67.  
  68. location /credits.txt {
  69. return 403;
  70. }
  71.  
  72. location /readme.txt {
  73. return 403;
  74. }
  75.  
  76. location ~ ^/license.(.*).txt$ {
  77. return 403;
  78. }
  79.  
  80. }
  81.  
  82. error_page 403 /error/403.html;
  83. error_page 404 /error/404.html;
  84. error_page 500 502 503 504 /error/50x.html;
  85.  
  86. location /error/ {
  87. alias %home%/%user%/web/%domain%/document_errors/;
  88. }
  89.  
  90. location ~* "/\.(htaccess|htpasswd)$" {
  91. deny all;
  92. return 404;
  93. }
  94.  
  95. location /vstats/ {
  96. alias %home%/%user%/web/%domain%/stats/;
  97. include %home%/%user%/conf/web/%domain%.auth*;
  98. }
  99.  
  100. include /etc/nginx/conf.d/phpmyadmin.inc*;
  101. include /etc/nginx/conf.d/phppgadmin.inc*;
  102. include /etc/nginx/conf.d/webmail.inc*;
  103.  
  104. include %home%/%user%/conf/web/nginx.%domain%.conf*;
  105. }
  106.  
  107.  
Закинул файлы на тестовый сервер и применил конфиг к сайту.
Сайт продолжает нормально работать.
Методики проверки правильности настроек не знаю.
#4 5 апреля 2020 в 21:04


Закинул файлы на тестовый сервер и применил конфиг к сайту.
Сайт продолжает нормально работать.
Методики проверки правильности настроек не знаю.

Ris
Если не забыли перегрузить NGINX тогда все получилось как хотели.
#5 5 апреля 2020 в 21:29
Ris, если вдруг не знаете
sudo nginx -t # проверить нет ли ошибок в конфигурационных файлах

Фрагменты вида
location /upload {
fastcgi_param PHP_FLAG "engine=on";
}
вроде разрешают выполнять код PHP в данной директории. Нам это надо?
#6 5 апреля 2020 в 21:58

если вдруг не знаете

@IamB
Не вдруг. Совершенно точно не знал. Теперь знаю. Спасибо!
sudo nginx -t #
nginx: [warn] the "ssl" directive is deprecated, use the "listen… ssl" directive instead in /home/******/conf/web/******.ru.nginx.ssl.conf:10
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Фрагменты вида
location /upload {
fastcgi_param PHP_FLAG "engine=on";
}
вроде разрешают выполнять код PHP в данной директории. Нам это надо?

@IamB
Я просто конвертировал на сайте winginx.com/ru/htaccess php_flag engine 0 из .htaccess этих дирректорий. Убираем?
Или fastcgi_param PHP_FLAG "engine=off"; ?

---------------------------------------------------------------------------------------------------------------------------------------

Сделал так:
  1. server {
  2. listen %ip%:%web_ssl_port% ssl;
  3. server_name %domain_idn% %alias_idn%;
  4. root %sdocroot%;
  5. index index.php index.html index.htm;
  6. access_log /var/log/nginx/domains/%domain%.log combined;
  7. access_log /var/log/nginx/domains/%domain%.bytes bytes;
  8. error_log /var/log/nginx/domains/%domain%.error.log error;
  9.  
  10. ssl_certificate %ssl_pem%;
  11. ssl_certificate_key %ssl_key%;
  12.  
  13. location / {
  14. try_files $uri $uri/ /index.php?$args;
  15.  
  16. location ~* ^.+\.(jpeg|jpg|png|webp|gif|bmp|ico|svg|css|js)$ {
  17. expires max;
  18. }
  19.  
  20. # deny running scripts inside writable directories
  21. location ~* /(cache|static|upload)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
  22. return 403;
  23. error_page 403 /403_error.html;
  24. }
  25.  
  26. location ~ [^/]\.php(/|$) {
  27. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  28. if (!-f $document_root$fastcgi_script_name) {
  29. return 404;
  30. }
  31.  
  32. fastcgi_pass %backend_lsnr%;
  33. fastcgi_index index.php;
  34. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  35. include /etc/nginx/fastcgi_params;
  36. }
  37.  
  38. location /cache {
  39. location ~* \.(js|css|xml)$ {
  40. allow all;
  41. }
  42. deny all;
  43. }
  44.  
  45. location /static {
  46. fastcgi_param PHP_FLAG "engine=off";
  47. }
  48.  
  49. location /system {
  50. deny all;
  51. }
  52.  
  53. location /templates {
  54. location ~ \.(js|css|scss|xml|png|gif|jpg|jpeg|ico|bmp|map|eot|svg|ttf|woff|woff2)$ {
  55. allow all;
  56. }
  57. }
  58.  
  59. location /upload {
  60. fastcgi_param PHP_FLAG "engine=off";
  61. }
  62.  
  63. location /wysiwyg {
  64. autoindex off;
  65. }
  66.  
  67. location /.htaccess {
  68. return 403;
  69. }
  70.  
  71. location /credits.txt {
  72. return 403;
  73. }
  74.  
  75. location /readme.txt {
  76. return 403;
  77. }
  78.  
  79. location ~ ^/license.(.*).txt$ {
  80. return 403;
  81. }
  82.  
  83. }
  84.  
  85. error_page 403 /error/403.html;
  86. error_page 404 /error/404.html;
  87. error_page 500 502 503 504 /error/50x.html;
  88.  
  89. location /error/ {
  90. alias %home%/%user%/web/%domain%/document_errors/;
  91. }
  92.  
  93. location ~* "/\.(htaccess|htpasswd)$" {
  94. deny all;
  95. return 404;
  96. }
  97.  
  98. location /vstats/ {
  99. alias %home%/%user%/web/%domain%/stats/;
  100. include %home%/%user%/conf/web/%domain%.auth*;
  101. }
  102.  
  103. include /etc/nginx/conf.d/phpmyadmin.inc*;
  104. include /etc/nginx/conf.d/phppgadmin.inc*;
  105. include /etc/nginx/conf.d/webmail.inc*;
  106.  
  107. include %home%/%user%/conf/web/snginx.%domain%.conf*;
  108. }
  109.  
Теперь всё красивше:
sudo nginx -t #
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#7 5 апреля 2020 в 22:20
OK!

Убираем?

Ris
Думаю, да. Мы же уже запретили обращение вот здесь
location ~* /(cache|static|upload)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
return 403;
error_page 403 /403_error.html;
}

sudo nginx -t
Диез не нужен.
#8 5 апреля 2020 в 23:12
Итак. Отправляю (попробую отправить) пул реквест разработчикам весты два файла. Для сайтов SSL и без него. Незначительно различаются шапкой.
Содержимое файла \vesta-master\install\rhel\7\templates\web\nginx\php-fpm\instantcms2.stpl такое:
  1. server {
  2. listen %ip%:%web_ssl_port% ssl;
  3. server_name %domain_idn% %alias_idn%;
  4. root %sdocroot%;
  5. index index.php index.html index.htm;
  6. access_log /var/log/nginx/domains/%domain%.log combined;
  7. access_log /var/log/nginx/domains/%domain%.bytes bytes;
  8. error_log /var/log/nginx/domains/%domain%.error.log error;
  9.  
  10. ssl_certificate %ssl_pem%;
  11. ssl_certificate_key %ssl_key%;
  12.  
  13. location / {
  14. try_files $uri $uri/ /index.php?$args;
  15.  
  16. location ~* ^.+\.(jpeg|jpg|png|webp|gif|bmp|ico|svg|css|js)$ {
  17. expires max;
  18. }
  19.  
  20. # deny running scripts inside writable directories
  21. location ~* /(cache|static|upload)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
  22. return 403;
  23. error_page 403 /403_error.html;
  24. }
  25.  
  26. location ~ [^/]\.php(/|$) {
  27. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  28. if (!-f $document_root$fastcgi_script_name) {
  29. return 404;
  30. }
  31.  
  32. fastcgi_pass %backend_lsnr%;
  33. fastcgi_index index.php;
  34. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  35. include /etc/nginx/fastcgi_params;
  36. }
  37.  
  38. location /cache {
  39. location ~* \.(js|css|xml)$ {
  40. allow all;
  41. }
  42. deny all;
  43. }
  44.  
  45. location /system {
  46. deny all;
  47. }
  48.  
  49. location /templates {
  50. location ~ \.(js|css|scss|xml|png|gif|jpg|jpeg|ico|bmp|map|eot|svg|ttf|woff|woff2)$ {
  51. allow all;
  52. }
  53. }
  54.  
  55. location /wysiwyg {
  56. autoindex off;
  57. }
  58.  
  59. location /.htaccess {
  60. return 403;
  61. }
  62.  
  63. location /credits.txt {
  64. return 403;
  65. }
  66.  
  67. location /readme.txt {
  68. return 403;
  69. }
  70.  
  71. location ~ ^/license.(.*).txt$ {
  72. return 403;
  73. }
  74.  
  75. }
  76.  
  77. error_page 403 /error/403.html;
  78. error_page 404 /error/404.html;
  79. error_page 500 502 503 504 /error/50x.html;
  80.  
  81. location /error/ {
  82. alias %home%/%user%/web/%domain%/document_errors/;
  83. }
  84.  
  85. location ~* "/\.(htaccess|htpasswd)$" {
  86. deny all;
  87. return 404;
  88. }
  89.  
  90. location /vstats/ {
  91. alias %home%/%user%/web/%domain%/stats/;
  92. include %home%/%user%/conf/web/%domain%.auth*;
  93. }
  94.  
  95. include /etc/nginx/conf.d/phpmyadmin.inc*;
  96. include /etc/nginx/conf.d/phppgadmin.inc*;
  97. include /etc/nginx/conf.d/webmail.inc*;
  98.  
  99. include %home%/%user%/conf/web/snginx.%domain%.conf*;
  100. }
#9 5 апреля 2020 в 23:42
Ris, для .htaccess видел чуть лучше решение, но искать сейчас не буду (что-то засыпаю).
#10 5 апреля 2020 в 23:44
@IamB,
Никуда не торопимся.
Завтра напишите, если найдёте.
#11 6 апреля 2020 в 11:02
Ris, думаю, что
location /cache {...}
location /system
location /templates
location /wysiwyg
location /.htaccess
location /credits.txt
location /readme.txt
location ~ ^/license.(.*).txt$
нужно поместить сразу в server {...}

location /.htaccess {
return 403;
}
и
location ~* "/\.(htaccess|htpasswd)$" {
deny all;
return 404;
}
дублируют друг друга.
И совсем забыли про sitemap.xml, конструкцию можно взять отсюда.
#12 6 апреля 2020 в 11:35

нужно поместить сразу в server {...}

@IamB
А нельзя ли изобразить наглядно, как их туда поместить?
Если честно, я не вижу какой-либо логики в построении конфигов nginx.
Чтение документации тоже ясности не прибавляет.
#13 6 апреля 2020 в 12:05
  1.  
  2. server {
  3. listen %ip%:%web_ssl_port% ssl;
  4. server_name %domain_idn% %alias_idn%;
  5. root %sdocroot%;
  6. index index.php index.html index.htm;
  7. access_log /var/log/nginx/domains/%domain%.log combined;
  8. access_log /var/log/nginx/domains/%domain%.bytes bytes;
  9. error_log /var/log/nginx/domains/%domain%.error.log error;
  10.  
  11. ssl_certificate %ssl_pem%;
  12. ssl_certificate_key %ssl_key%;
  13.  
  14. location / {
  15. try_files $uri $uri/ /index.php?$args;
  16.  
  17. location ~* ^.+\.(jpeg|jpg|png|webp|gif|bmp|ico|svg|css|js)$ {
  18. expires max;
  19. }
  20.  
  21. # deny running scripts inside writable directories
  22. location ~* /(cache|static|upload)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
  23. return 403;
  24. error_page 403 /403_error.html;
  25. }
  26.  
  27. location ~ [^/]\.php(/|$) {
  28. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  29. if (!-f $document_root$fastcgi_script_name) {
  30. return 404;
  31. }
  32.  
  33. fastcgi_pass %backend_lsnr%;
  34. fastcgi_index index.php;
  35. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  36. include /etc/nginx/fastcgi_params;
  37. }
  38.  
  39.  
  40.  
  41. }
  42.  
  43. error_page 403 /error/403.html;
  44. error_page 404 /error/404.html;
  45. error_page 500 502 503 504 /error/50x.html;
  46.  
  47. location /error/ {
  48. alias %home%/%user%/web/%domain%/document_errors/;
  49. }
  50.  
  51. location /cache {
  52. location ~* \.(js|css|xml)$ {
  53. allow all;
  54. }
  55. deny all;
  56. }
  57.  
  58. location /system {
  59. deny all;
  60. }
  61.  
  62. location /templates {
  63. location ~ \.(js|css|scss|xml|png|gif|jpg|jpeg|ico|bmp|map|eot|svg|ttf|woff|woff2)$ {
  64. allow all;
  65. }
  66. }
  67.  
  68. location /wysiwyg {
  69. autoindex off;
  70. }
  71.  
  72. location /credits.txt {
  73. return 403;
  74. }
  75.  
  76. location /readme.txt {
  77. return 403;
  78. }
  79.  
  80. location ~ ^/license.(.*).txt$ {
  81. return 403;
  82. }
  83.  
  84. location ~* "/\.(htaccess|htpasswd)$" {
  85. deny all;
  86. return 404;
  87. }
  88.  
  89. location ~ ^/sitemap(.*)\.xml$ {
  90. rewrite ^/sitemap(.*)\.xml$ /cache/static/sitemaps/sitemap$1.xml break;
  91. }
  92.  
  93. location /vstats/ {
  94. alias %home%/%user%/web/%domain%/stats/;
  95. include %home%/%user%/conf/web/%domain%.auth*;
  96. }
  97.  
  98. include /etc/nginx/conf.d/phpmyadmin.inc*;
  99. include /etc/nginx/conf.d/phppgadmin.inc*;
  100. include /etc/nginx/conf.d/webmail.inc*;
  101.  
  102. include %home%/%user%/conf/web/snginx.%domain%.conf*;
  103. }
  104.  
#14 6 апреля 2020 в 12:28
@IamB,
Спасибо!
Испробовал на тестовом сервере — работает, ошибок нет.
Применил на рабочем сервере — работает, ошибок нет.
Добавил предложение на гитхабе весты.
#15 6 апреля 2020 в 12:39
Ris, оу! Плод "коллективного бессознательного" работает.
Вы там потыкайте обращениями к файлам, которые мы запретили. Hello World на php в директории upload запустите. Чтобы уверенность была.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.