Привет сообщество!
На новом VPS (Ubuntu 16.04 + Nginx1.10 + PHP7.0-FPM + MySQL) распаковываю дистрибутив в директорию /var/www/html/my_domen.ru, даю права на файлы, в браузере вижу: "502 Bad Gateway ". До распаковки архива, по адресу, видна заглушка Nginx, если подставить произвольный Index.html, тоже видна страница. При этом поддомен для phpmyadmin - pma.my_domen.ru работает без проблем. Настройка VPS осуществлялась по инструкции http://www.cs-cart.ru/docs/4.3.x/install/vps/nginx/с поправкой на уже более новые релизы ПО.
Как победить 502 Bad Gateway?
В логе /var/log/nginx/error.log следующее:
2016/10/09 13:02:10 [crit] 11939#11939: *34 connect() to unix:/run/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 31.173.85.56, server: my_domen.ru, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php7.0-fpm.sock:", host: "my_domen.ru" 2016/10/09 13:03:07 [emerg] 12378#12378: "server" directive is not allowed here in /etc/nginx/sites-enabled/default:38
Файл конфигурации /etc/nginx/sites-available/default
################################################################################
# Виртуальный хост по умолчанию, предназначен для работы по IP адресу или домену без собственной конфигурации
################################################################################
server {
listen 80;
server_name _;
root /var/www/empty;
# Редирект на нужный магазин по умолчанию
location / {
return 301 $scheme://my_domen.ru$request_uri;
}
}
################################################################################
Описание и конфигурация основного домена для интернет-магазина
################################################################################
server {
listen 80;
# Домен интернет-магазина
server_name my_domen.ru www.my_domen.ru;
# Кодировка по-умолчанию
charset utf-8;
# Расположение логов
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log;
# Основной каталог интернет-магазина
root /var/www/html/my_domen.ru;
# Сжатие
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types text/plain application/xml
application/javascript
text/css
text/js
text/xml
application/x-javascript
text/javascript
application/json
application/xml+rss;
# Прочие настройки
client_max_body_size 100m;
client_body_buffer_size 128k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
# Точка входа в интернет-магазин
location / {
# Папка с файлами интернет-магазина
root /var/www/html/my_domen.ru;
# Главный скрипт
index index.php index.html index.htm;
# Для работы API
rewrite ^/api/(.*)$ /api.php?_d=$1&ajax_custom=1&$args last;
# Логика поиска скрипта по порядку: файл, папка, скрипт
try_files $uri $uri/ @fallback;
}
# Правиле rewrite для модуля SEO
location @fallback {
rewrite ^(.*)$ /index.php?$args last;
}
# Настройки статики, первое правило
location ~* \.(jpeg|ico|jpg|gif|png|css|js|pdf|txt|tar|gz|wof|csv|zip|xml|yml|woff|ttf) {
access_log off;
# Правило поиска статических файлов. Если файл не находится по адресу магазина, то ищем файл по правилу @statics.
# Например если магазин расположен в подпапке my_domen.ru/shop/
try_files $uri @statics;
expires 14d;
add_header Access-Control-Allow-Origin *;
add_header Cache-Control public;
root /var/www/html/my_domen.ru;
}
# Правило поиска статических файлов для витрин. Например, если у Вас две витрины в разных подпапках: my_domen.ru и my_domen.ru/shop/
location @statics {
rewrite ^/(\w+)/(.*)$ /$2 break;
access_log off;
rewrite_log off;
expires 14d;
add_header Cache-Control public;
add_header Access-Control-Allow-Origin *;
root /var/www/html/my_domen.ru;
}
# Обрабатываем PHP скрипты. Магия
location ~ \.php$ {
root /var/www/html/my_domen.ru;
proxy_read_timeout 61;
fastcgi_read_timeout 61;
try_files $uri $uri/ =404;
# Путь до сокета демона PHP-FPM
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass unix:/run/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Ограничиваем возвожность запуска php в каталогах. Для безопасности.
location /app/ {
deny all;
# Разрешаем запуск скрипта обмена данными с 1С.
location ^~ /app/addons/rus_exim_1c/exim_1c.php {
allow all;
}
}
# Разрешаем запуск скриптов способов оплаты
location /app/payments/ {
allow all;
}
# Запрещаем PHP в папке /design
location /design/ {
allow all;
location ~* \.([tT][pP][lL]|[pP][hH][pP].?)$ {
deny all;
}
}
# Запрещаем PHP в папке /images
location /images/ {
allow all;
location ~* \.([pP][hH][pP].?)$ {
deny all;
}
}
# Разрешаем только статику в папке /var
location /var/ {
deny all;
location ~* \.(js|css|png|jpg|gz|xml|yml)$ {
allow all;
expires 1M;
add_header Cache-Control public;
add_header Access-Control-Allow-Origin *;
}
}
# Закрываем доступ к бэкапам базы данных интернет-магазина (папка /var/database/) с наружи
location /var/database/ {
deny all;
}
# Хранилище резервных копий шаблонов
location /var/skins_repository/ {
allow all;
location ~* \.([tT][pP][lL]|[pP][hH][pP].?)$ {
deny all;
}
}
# Обработка API
location ~* api/ {
rewrite ^/api/(.*)$ /api.php?_d=$1&ajax_custom=1&$args last;
}
# Запрвещаем .htaccess и .htpasswd
location ~ /\.ht {
deny all;
}
}
################################################################################
pma.my_domen.ru
################################################################################
server {
listen 80;
# Поддомен для phpmyadmin
server_name pma.my_domen.ru www.pma.my_domen.ru;
# root /run/php/;
charset utf-8;
# Расположение логов
access_log /var/log/nginx/pma.my_domen.ru_access.log combined;
error_log /var/log/nginx/pma.my_domen.ru_error.log;
# Путь по которому будет ссылаться поддомен
root /usr/share/phpmyadmin;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
root /usr/share/phpmyadmin;
proxy_read_timeout 61;
fastcgi_read_timeout 61;
try_files $uri $uri/ =404;
# Задаёт адрес FastCGI-сервера. Адрес указан в виде порта
# fastcgi_pass unix:/var/run/php7.0-fpm.sock;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
# Подстановка имени файла после слеша в адресной строке/
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}