Configure Nginx para uma app Ruby
Eu faço deploy usando mina e docker e na frente do servidor da aplicação eu coloco Cloudflare e nginx.
Eu ainda uso nginx pois, primeiro, que o nginx é melhor na tarefa de servir conteúdo estático e, segundo, que se eu algum dia precisar colocar mais de um servidor é mais fácil configurar do que instalar e configurar.
O nginx é tão fácil de instalar que eu prefiro instalar usando apt (Um dia vou saber o porquê de se usar nginx dentro do docker ou do docker-compose, se você sabe por favor me diga 😐):
# apt install nginx
Eu também sigo o jeito Debian (ou jeito Ubuntu), crie um arquivo: /etc/nginx/sites-available/mywebsite.com:
upstream backend {
server 127.0.0.1:5001;
}
server {
listen 80;
root /mywebsite/current/public;
server_name mywebsite.com www.mywebsite.com;
if (-f $document_root/503.html) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /503.html break;
}
location ~ / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
try_files $uri @app;
}
location @app {
charset utf8;
source_charset utf8;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://backend;
}
}
E crie o link:
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
O arquivo de configuração é bem fácil de entender:
- O puma tá rodando na mesma máquina
127.0.0.1na porta5001 - A raiz do servidor é em
/mywebsite/currente o diretóriopublicfica em/mywebsite/current/public, não esqueça que você tem que apontar para o diretóriopublicmesmo que você não use o mina para fazer deploy - Se o diretório
publictiver um arquivo503.htmlo nginx vai retornar uma página de manutenção proxy_passtem que apontar para oupstreame- O
upstream backendé a lista de servidores que você tem - Os outros
proxysão para passar o endereço ip real da requisição adiante
Eu não mudo nada mais com o nginx, lembre-se que eu uso Cloudflare para proteção DDoS e SSL.
Você também pode querer configurar o seu servidor para somente aceitar conexão dos servidores do Cloudflare (os endereçoes ip estão aqui: IP Ranges).