Здравствуйте, люди добрые!
Сайт расположен на VPS хостинге.
domen.ru условно домен.
Задача сделать возможным обращения к сайту domen.ru по https://
Все измененные настройки должны быть в рабочем состоянии после перезагрузки системы. После решения вопроса нужно подробно описать что являлось причиной проблемы и какие были внесены изменения.
Проблема:
Не удается получить доступ к сайту Сайт domen.ru не позволяет установить соединение.
Попробуйте сделать следующее:
Проверьте подключение к Интернету.
Проверьте настройки прокси-сервера и брандмауэра.
ERR_CONNECTION_REFUSED
Окружение поднято с помощью docker-compose
Ключевые файлы на мой взгляд:
/var/www/domen/docker-compose.yml (заменил опциональные переменные из .env на очевидные слова для лучшего понимания путей)
/var/www/domen/docker/containers/nginx/dev/Dockerfile (копирование конфига для nginx)
/var/www/domen/docker/nginx/prod.conf (конфиг nginx)
При текущей конфигурации docker-compose.yml открывается только на 80 порту по имени домена и по ip адресу
http://%IP%/
В docker-compose.yml оставлены комменты варианта с отключением ipv6, в таком варианте контейнер nginx вообще не развертывается (docker ps после билда)
Сертификаты сгенерированы certbot ом и находятся в папке:
/var/www/domen/volumes/ssl
/etc/hosts:
127.0.0.1 localhost
%IP%
domen.ru
docker -v
Docker version 19.03.3, build a872fc2f86
docker-compose -v
docker-compose version 1.24.1, build 4667896b
Доступ:
ssh root@%IP%;
%PASS%;
Файл docker-compose:
version: '3.7'
services:
nginx:
container_name: nginx
build:
context: ./
dockerfile: docker/containers/nginx/prod/Dockerfile
volumes:
${APP_PATH_HOST}:/var/www
./volumes/ssl:/etc/nginx/ssl
./volumes/log/nginx/:/var/log/nginx/
ports:
80:80
443:443
extra_hosts:
domen.ru:%IP%
php-fpm:
container_name: php-fpm
build: ${CONTAINERS_PATH}/php-fpm
volumes:
${APP_PATH_HOST}:/var/www
environment:
REDIS_PORT=6379
REDIS_HOST=redis
DB_CONNECTION=pgsql
DB_PORT=5432
DB_HOST=pgsql
php-cli:
container_name: php-cli
build: ${CONTAINERS_PATH}/php-cli
volumes:
${APP_PATH_HOST}:/var/www
environment:
REDIS_PORT=6379
REDIS_HOST=redis
DB_CONNECTION=pgsql
DB_PORT=5432
DB_HOST=pgsql
tty: true
pgsql:
container_name: pgsql
image: postgres:${POSTGRES_VERSION}
environment:
POSTGRES_USER=${DB_USER}
POSTGRES_PASSWORD=${DB_PASSWORD}
POSTGRES_DATABASE=${DB_NAME}
ports:
54321:5432
volumes:
${STORAGE_PATH}/postgres:/var/lib/postgresql/data
node:
container_name: node
image: node:${NODE_VERSION}
volumes:
${APP_PATH_HOST}:/var/www
working_dir: /var/www
tty: true
prod.conf:
server {
listen 80;
server_name
domen.ru;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location /docs {
try_files $uri $uri/;
}
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
# return 301 https://$host$request_uri;
}
server {
listen 443;
server_name
kprussia.ru;
#charset utf-8;
index index.php;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location /docs {
try_files $uri $uri/;
}
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}
PS
Я хардкорно рестарую окружение сайта с помощью готовой команды в /var/ww/domen/Makefile:
sudo make system-reset-warning;
cd /var/www/domen;
ЛОКАЛЬНО с той же конфигураций сайт открывается как
А вот так нет:
Этот сайт не может обеспечить безопасное соединение Сайт localhost отправил недействительный ответ.
ERR_SSL_PROTOCOL_ERROR
ЖЕЛАТЕЛЬНО, НО НЕ ОБЯЗАТЕЛЬНО
Настроить автогенерирование сертификатов внутри nginx контейнера для указанного домена или доп. контейнером certbot. Сейчас серты внутри хостинга.