比如helloflask.com下有bluelog.helloflask.com和sayhello.helloflask.com等等子域名,我想知道(1)怎么才能给不同的应用如“博客”bluelog和"留言板"sayhello等等分配子域名,(2)还有我想知道这些文件的结构,是相互独立的还是放在一个文件夹下的?谢谢。
每个程序放在单独的文件夹,各自独立。使用 Gunicorn 运行程序时,为不同的程序分配不同的本地端口,比如 Sayhello 运行在 localhost:8001,Bluelog 运行在 localhost:8001。用 Supervisor 来统一管理启动配置:
[program:sayhello]
command=pipenv run gunicorn -w 2 wsgi:app
directory=/home/greyli/sayhello
user=greyli
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
[program:bluelog]
command=pipenv run gunicorn -b 127.0.0.1:8001 -w 3 wsgi:app
directory=/home/greyli/bluelog
user=greyli
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
然后使用 Nginx 处理外部请求,并映射子域名到对应的端口:
server { # Sayhello
listen 80;
server_name sayhello.helloflask.com; # 如果你映射了域名,那么可以写在这里
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:8000; # 转发的地址,即Gunicorn运行的地址
proxy_redirect off;
proxy_set_header Host $host;
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 $scheme;
}
location /static { # 处理静态文件夹中的静态文件
alias /home/greyli/sayhello/sayhello/static/;
expires 30d; # 设置缓存过期时间
}
}
server { # Bluelog
listen 80;
server_name bluelog.helloflask.com; # 如果你映射了域名,那么可以写在这里
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_redirect off;
proxy_set_header Host $host;
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 $scheme;
}
location /static {
alias /home/greyli/bluelog/bluelog/static/;
expires 30d;
}
}
上面的代码示例是 helloflask.com 的实际代码,你需要对启动命令、路径、域名等地方进行调整。