如何把不同的应用放在同一个域名的不同子域下?

比如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 的实际代码,你需要对启动命令、路径、域名等地方进行调整。