![Nginx & Django & Gunicorn – Redirecionando subdomínio para aplicativo](https://rvso.com/image/747332/Nginx%20%26%20Django%20%26%20Gunicorn%20%E2%80%93%20Redirecionando%20subdom%C3%ADnio%20para%20aplicativo.png)
Fiz uma extensa pesquisa sobre o assunto, mas nada poderia me ajudar.
Atualmente estou construindo um site Django e usando o Nginx para reverter o proxy para o Gunicorn.
Estou tentando separar meus aplicativos em subdomínios. (blog.example.com, admin.example.com, user.example.com etc.)
Cuidei dos registros DNS e eles estão funcionando adequadamente, pois meu projeto inicial usava apenas Nginx.
Posso acessar os aplicativos navegando até a "subpasta" example.com/blog.
A configuração fica assim:
/etc/systemd/system/gunicorn.socket:
[Unit]
Description=Gunicorn socket for example.com
[Socket]
ListenStream=/run/example.sock
[Install]
WantedBy=sockets.target
/etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon for example.com
Requires=gunicorn.socket
After=network.target
[Service]
User=example
Group=www-data
WorkingDirectory=/home/example/project
ExecStart=/home/sammy/project/projectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
project.wsgi:application
[Install]
WantedBy=multi-user.target
/etc/nginx/sites-available/exemplo:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example/project;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Adicionei outro serverblock para blog.example.com e adicionei /blog na linha proxy_pass: proxy_pass http://unix:/run/gunicorn.sock/blog;
esperando que ele redirecione para a pasta do aplicativo.
Sou novo no método de soquete e não sei como conseguir o redirecionamento.
Estou ciente de que o Nginx deve lidar com o redirecionamento e tudo mais, mas não sei como prosseguir.
Qualquer ajuda é muito apreciada.
Responder1
Você poderia ter um serviço gunicorn por aplicativo:
/etc/systemd/system/blog.example.com.service
[Unit]
Description=gunicorn daemon for blog.example.com
Requires=gunicorn.socket
After=network.target
[Service]
User=example
Group=www-data
WorkingDirectory=/home/example/project/blog
ExecStart=/home/sammy/project/projectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/blog.example.com.sock \
project.wsgi:application
[Install]
WantedBy=multi-user.target
/etc/systemd/system/admin.example.com.service
[Unit]
Description=gunicorn daemon for admin.example.com
Requires=gunicorn.socket
After=network.target
[Service]
User=example
Group=www-data
WorkingDirectory=/home/example/project/admin
ExecStart=/home/sammy/project/projectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/admin.example.com.sock \
project.wsgi:application
[Install]
WantedBy=multi-user.target
Em seguida, aponte o nginx para os respectivos .sock
arquivos:
/etc/nginx/sites-available/blog.example.com
server {
listen 80;
server_name blog.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example/project;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/blog.example.com.sock;
}
}
/etc/nginx/sites-available/admin.example.com
server {
listen 80;
server_name admin.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example/project;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/admin.example.com.sock;
}
}
Responder2
Você deveria usararquivos de serviço e soquete separadospara cada aplicativo e usohosts explícitos em vez de soquetes unix.
Mude os termos unix:/run/blog
com algo como 127.0.0.1:8000
no seutomadaeserviçoarquivos. WorkingDirectory
O parâmetro deve ser o mesmo em todos os arquivos de serviço, deve apontar o diretório que contém manage.py
. Finalmente você deve definir proxy_pass http://127.0.0.1:8000/blog/;
em seunginxconfiguração.
/etc/systemd/system/blog.example.com.socket
Unit]
Description=Gunicorn socket for blog.example.comg
[Socket]
ListenStream=8000
[Install]
WantedBy=sockets.target
/etc/systemd/system/blog.example.com.service
[Unit]
Description=gunicorn daemon for blog.example.com
Requires=blog.example.com.socket
After=network.target
[Service]
User=example
Group=www-data
WorkingDirectory=/home/example/project/blog
ExecStart=/home/sammy/project/projectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind 127.0.0.1:8000 \
project.wsgi:application
[Install]
WantedBy=multi-user.target
/etc/nginx/sites-available/blog-example:
server {
listen 80;
server_name blog.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example/project;
}
location / {
include proxy_params;
proxy_pass http://127.0.0.1:9000/blog/;
}
}