Внесите в ваш docker-compose.yml
следующие изменения и оставьте открытыми порты (80 и 443) только в сервисе nginx-proxy
и добавьте VIRTUAL_HOST
и LETSENCRYPT_HOST
в environments
в ваш сервис (или сервисы), который слушает 80 порт (можно использовать и другие порты/настройки, см. ниже):
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./vhost.d:/etc/nginx/vhost.d:ro
- ./data/certs:/etc/nginx/certs
- ./data/html:/usr/share/nginx/html
- ./proxy.conf:/etc/nginx/proxy.conf
nginx-proxy-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
environment:
- DEFAULT_EMAIL=crusat@yandex.ru
- NGINX_PROXY_CONTAINER=nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/acme.sh
- ./vhost.d:/etc/nginx/vhost.d
- ./data/certs:/etc/nginx/certs
- ./data/html:/usr/share/nginx/html
server:
# ...
environment:
- VIRTUAL_HOST=example.ru
- LETSENCRYPT_HOST=example.ru
# ...
Создайте в корне файл proxy.conf
:
# HTTP 1.1 support
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
# Mitigate httpoxy attack (see README for details)
proxy_set_header Proxy "";
# additional
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
Создайте файл vhost.d/default
:
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
client_max_body_size 200m;
Также, если необходимо несколько доменов, то можно добавить прокси по имену домена, например, vhost.d/example.ru
:
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
server_tokens off;
client_max_body_size 2000m;
Для дополнительной документации смотрите сюда: https://hub.docker.com/r/jwilder/nginx-proxy/