一つのサーバーで複数のサイトをホスティングしたかったのでやってみた。
もともとdockerでnginxを動かして配信していたので、dockerを使う。
nginx-proxy
nginx-proxyを設置する。
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes:
- /srv/docker/nginx-proxy-with-encrypt/certs:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- common_link
restart: always
letsencrypt-nginx:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx
privileged: true
volumes:
- /srv/docker/nginx-proxy-with-encrypt/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
networks:
- common_link
restart: always
networks:
common_link:
external: true
ホスティングするサイトのNginx
server {
listen 80;
listen 443;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
version: '2'
services:
nginx:
image: nginx:latest
container_name: "site1"
volumes:
- ./public:/usr/share/nginx/html
- ./default.conf:/etc/nginx/conf.d/default.conf
environment:
VIRTUAL_HOST: site1.example.com
LETSENCRYPT_HOST: site1.example.com
LETSENCRYPT_EMAIL: example@mail.com
restart: always
networks:
- common_link
networks:
common_link:
external: true
Host名を他のものに変えれば、他のドメインのサイトを立てられます。
github
https://github.com/nozo-moto/nginx_multi_site_try