基于docker-compose配置的nginx多域名转发
目的不用多说了,一台云服务器配置多个站点,对应多个域名。用到了nginx, nginx-proxy, 分发到一个静态网站和本dokuwiki。静态网站直接挂到了nginx下。
容器配置感觉比直接配Nginx还简单,关键还安全,对外只提供一个接口。这源于docker-compose的内部消息机制
docker-compose的配置 #
首先建立一个子网络,用于内部消息分发
docker network create nginx-proxy
# 查看
docker network ls
然后是docker-compose的配置文件,包含三个服务,nginx-basic
是对外的接口; dokuwiki
是其中一个网络服务; blog
是另一个。
# yaml 配置
version: '3'
services:
nginx-basic:
image: nginx:stable-alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /path/to/nginx.conf:/etc/nginx/nginx.conf
- /path/to/nginx/certs:/etc/nginx/certs
dokuwiki:
image: "bitnami/dokuwiki:latest"
restart: always
volumes:
- /path/to/dokuwiki_data:/bitnami/dokuwiki
blog:
image: nginx:stable-alpine
container_name: blog
restart: always
volumes:
- /path/to/blog_data:/usr/share/nginx/html
networks:
default:
name: nginx-proxy
nginx的配置 #
用的是nginx-proxy,看一下能懂。注意上面的events {}
,第一次配置不生效就是因为这玩意儿,不然一次就成了。如果不加,会报错:
nginx: [emerg] no “events” section in configuration
从配置可以看到几个优点:
- 不用再考虑给各服务分配什么服务器端口了,每个容器端口独立,爽得很。
- 内部不需要IP,直接使用服务名传递消息,容易部署了。
- 对外的接口完全可控,内部接口不对外,安全性杠杠的。
Nginx常用配置如下。现在遇到问题不用去查了,chatgpt能够快速给出答案,比网上的答案准多了。
events {}
http {
# 跳转链接
server {
listen 80;
listen 443;
server_name duxy.cc;
location / {
return 301 http://kd.duxy.cc$request_uri;
}
}
# 多域名反向代理
server {
listen 80;
listen 443;
server_name imag.duxy.cc v3.imag-njust.net;
location / {
proxy_pass http://imag:80;
}
}
# https配置
server {
listen 80;
listen 443;
server_name wiki.duxy.cc;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://wikitten:80;
}
}
}