Eu resolvi o problema, mas esta não é uma solução geral. No meu caso, o Docker estava interferindo no iptables e não permitia conexões na porta 443. Depois que expus a porta do Docker, ela começou a funcionar.
Então, estou tentando fazer o Nginx servir meu site via https, mas ele continua me pressionando com um erro de conexão recusada.
Então, aqui estão as saídas para:
curl link (este é o site)
curl: (7) Failed to connect to juristnet.ro port 443: Connection refused
netstat-anltp
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN -
tcp 0 0 46.101.111.197:80 66.249.64.215:60905 TIME_WAIT -
tcp 0 0 46.101.111.197:80 66.249.64.211:57434 ESTABLISHED -
tcp 0 0 46.101.111.197:22 82.208.159.43:26902 ESTABLISHED -
tcp 0 476 46.101.111.197:22 82.208.159.43:11648 ESTABLISHED -
tcp 0 0 46.101.111.197:22 223.99.60.37:16862 ESTABLISHED -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::30845 :::* LISTEN -
Como você pode ver, a porta 443 está aberta e o Nginx está escutando
80/tcp open http
443/tcp open https
3306/tcp open mysql
5432/tcp open postgresql
O Nmap mostra que a porta está aberta.
O UFW está inativo, portanto, não há problemas de firewall. É uma gota no digitalocean, então não há problemas de encaminhamento do lado deles.
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere localhost tcp spts:1024:65535 dpt:https state NEW,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:https
Meu Nginx.conf:
user admin root;
worker_processes auto;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
include /etc/nginx/conf.d/*.conf;
}
Meu outro conf (para os blocos de servidores):
server {
listen 80;
listen 443 ssl;
server_name juristnet.ro www.juristnet.ro;
keepalive_timeout 70;
ssl_certificate /etc/letsencrypt/live/juristnet.ro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/juristnet.ro/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/test/proiect;
client_max_body_size 10M;
location = /favicon.ico
{
access_log off; log_not_found off;
alias /var/test/proiect/favicon.ico;
}
location /static/
{
autoindex on;
}
location /assets/
{
autoindex on;
alias /var/test/proiect/assets/;
}
location ~ /.well-known/
{
allow all;
}
location / {
include /etc/nginx/fastcgi_params;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://unix:/var/test/proiect/Tutorial2.sock;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
}
Há também outro subdomínio, mas acredito que isso não seja relevante.
Os logs de erro e os logs de acesso para o nginx não mostram nada de especial.
Os certificados foram obtidos do letsencrypt. Se eu tentar ligar gunicorn
como é em 0.0.0.0:8000, com as opções --keyfile e --certfile, ele funciona com https, então estou supondo que esse seja um problema do nginx. Ou talvez eu precise adicionar essas configurações em algum lugar? Enfim, eu tenho batido minha cabeça por dois dias, então se alguém tiver alguma solução para isso, eu ficaria muito grato.
Eu resolvi o problema, mas esta não é uma solução geral. No meu caso, o Docker estava interferindo no iptables e não permitia conexões na porta 443. Depois que expus a porta do Docker, ela começou a funcionar.
Tags ssl nginx firewall gunicorn lets-encrypt