在单个 Nginx 服务器上托管多个网站
在一台服务器上运行多个网站是 Web 开发人员和系统管理员的常见要求。本指南将引导您完成配置 Nginx 的过程,以便使用单独的域为多个网站提供服务,每个网站都使用 Gunicorn 运行自己的 Python/Django 应用程序。
在本文中,我假设您知道如何部署和设置用户和权限。
目录结构
您的项目应该组织在一个干净的目录结构中:
/home/username/ ├── FirstProject/ │ ├── manage.py │ └── ... (other Django files) ├── SecondProject/ │ ├── manage.py │ └── ... (other Django files) └── venv/
步骤1:配置Nginx虚拟主机
Nginx 使用服务器块(虚拟主机)来处理多个域。为每个网站创建单独的配置文件:
创建第一个网站的配置:
server {
listen 80;
server_name your-first-domain.com;
location = /favicon.ico {
access_log off;
log_not_found off;
}
location /static/ {
root /home/username/FirstProject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}创建第二个网站的配置:
server {
listen 80;
server_name your-second-domain.com;
location = /favicon.ico {
access_log off;
log_not_found off;
}
location /static/ {
root /home/username/SecondProject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn-second.sock;
}
}第 2 步:设置 Gunicorn 服务
每个网站都需要自己的 Gunicorn 服务和套接字。设置方法如下:
创建第一个 Gunicorn 服务文件(/etc/systemd/system/gunicorn.service):
[Unit]
Description=gunicorn daemon for first site
Requires=gunicorn.socket
After=network.target
[Service]
User=username
Group=www-data
WorkingDirectory=/home/username/FirstProject
ExecStart=/home/username/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
FirstProject.wsgi:application
[Install]
WantedBy=multi-user.target创建第二个 Gunicorn 服务文件(/etc/systemd/system/gunicorn-second.service):
[Unit]
Description=gunicorn daemon for second site
Requires=gunicorn-second.socket
After=network.target
[Service]
User=username
Group=www-data
WorkingDirectory=/home/username/SecondProject
ExecStart=/home/username/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn-second.sock \
SecondProject.wsgi:application
[Install]
WantedBy=multi-user.target为两个服务创建套接字文件:
第一个套接字(/etc/systemd/system/gunicorn.socket):
Description=gunicorn socket for first site [Socket] ListenStream=/run/gunicorn.sock User=www-data [Install] WantedBy=sockets.target
第二个套接字(/etc/systemd/system/gunicorn-second.socket):
[Unit] Description=gunicorn socket for second site [Socket] ListenStream=/run/gunicorn-second.sock User=www-data [Install] WantedBy=sockets.target
步骤 3:启动并启用服务
重新加载 systemd 以识别新服务:
`sudo systemctl daemon-reload`
启动并启用两个套接字:
`sudo systemctl 启动 gunicorn.socket gunicorn-second.socket
sudo systemctl 启用 gunicorn.socket gunicorn-second.socket`
启动并启用两个服务:
`sudo systemctl 启动 gunicorn gunicorn-second
sudo systemctl 启用 gunicorn gunicorn-second`
测试 Nginx 配置:
`sudo nginx -t`
重新加载并检查服务状态
sudo systemctl reload nginx sudo systemctl status gunicorn sudo systemctl status gunicorn-second
和瓦拉