Điểm:0

Máy chủ từ chối kết nối sau khi cài đặt SSL qua Certbot | Docker + Nginx, AWS Lightail

lá cờ it

Tôi đã cài đặt thành công SSL qua certbot vào bộ chứa Nginx Docker của mình, nhưng sau khi cài đặt, tất cả lưu lượng được định tuyến qua HTTPS từ chối kết nối.

cuộn tròn https://www.example.com hoặc cuộn tròn https://the_ip_of_server

curl: (7) Không thể kết nối với cổng example.com 443 sau 9822 ms: Kết nối bị từ chối

~Cổng 443 đang mở trên máy chủ (AWS Lisghtsail)

cuộn tròn http://www.example.com

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.21.6</center>
</body>
</html>

nhưng khi cuộn tròn http://the_ip_of_server

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.21.6</center>
</body>
</html>


đây là nginx.conf

#Giới hạn đồng thời
limit_conn_zone $binary_remote_addr zone=per_ip:10m;

người phục vụ {
server_name example.com www.example.com;

địa điểm / {
    proxy_pass http://flask:8080/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Máy chủ lưu trữ $host;
    proxy_redirect tắt;
    bật proxy_intercept_errors;

    limit_conn per_ip 12;
}

error_page 404 /notfound.html;
vị trí /notfound.html {
    gốc/var/www/html;
    nội bộ;
}

error_page 500 502 503 504 /maintenance.html;
vị trí /maintenance.html {
    gốc/var/www/html;
    nội bộ;
}

nghe 443 ssl; # được quản lý bởi Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # được quản lý bởi Certbot
bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot

}


người phục vụ {
nếu ($host = www.example.com) {
    trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot


nếu ($host = example.com) {
    trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot


nghe 80 default_server;
server_name example.com www.example.com;
trả lại 404; # được quản lý bởi Certbot

}

docker-compose.yml

phiên bản: '3.7'

dịch vụ:

bình giữ nhiệt:
  xây dựng: ./Ứng dụng Flask
  container_name: bình
  khởi động lại: luôn luôn
  môi trường:
    - APP_NAME=Env
  lộ ra:
    - 8080

nginx:
  xây dựng: ./Nginx
  container_name: nginx
  khởi động lại: luôn luôn
  cổng:
    - "80:80"
Martin avatar
lá cờ kz
Vui lòng cung cấp thêm một số thông tin... Bạn có nginx chạy bên ngoài docker dưới dạng proxy ngược, chuyển tiếp lưu lượng truy cập đến bộ chứa docker của bạn, đúng không? Bạn đã thử kết nối với ```http://flask:8080/``` từ máy đang chạy nginx chưa? Có điều gì thú vị bên trong nhật ký nginx không? Có thể bộ chứa docker đã thoát/bị lỗi, bạn đã kiểm tra chưa?
Pranav avatar
lá cờ it
Nginx đang chạy trên một bộ chứa docker riêng biệt trong khi bình đang chạy trên một bộ chứa khác, tôi đã thử `curl http://flask:8080/` từ bộ chứa Nginx và đầu ra vẫn ổn. và cả hai vùng chứa docker đều chạy tốt (không gặp sự cố) trên mạng docker.
Martin avatar
lá cờ kz
được rồi, bạn có nghĩ đến việc xuất bản cổng 443 của bộ chứa nginx lên máy chủ không?
Pranav avatar
lá cờ it
hmm, cổng 80 của vùng chứa đã được xuất bản sang cổng 80 của máy chủ lưu trữ. tôi không chắc cổng nào của Máy chủ sẽ được gán cho cổng 443 của vùng chứa! Tôi sẽ cập nhật câu hỏi bằng tệp `docker-compose` của mình.
Martin avatar
lá cờ kz
cổng 443 được sử dụng cho lưu lượng truy cập https, cổng 80 chỉ được sử dụng cho lưu lượng truy cập http không được mã hóa. Thêm một dòng vào tệp soạn thảo của bạn tương tự như cổng xuất bản 80: cổng 443 của bộ chứa nginx phải được xuất bản lên cổng 443 của hệ thống máy chủ của bạn.
Pranav avatar
lá cờ it
Không! tuy nhiên, Kết nối bị từ chối :( nhưng `http://` hoạt động tốt mà không cần SSL ofc.
Pranav avatar
lá cờ it
Rất tiếc, bạn đời! đó là lỗi của tôi, tôi đã xây dựng lại `docker-compose` cuối cùng nó lại tạo lại `nginx.conf`, vì vậy tôi đã cài đặt lại `certbot` và mọi thứ đều ổn! :)
Pranav avatar
lá cờ it
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/136213/discussion-between-pranav-and-martin).
Điểm:0
lá cờ it

Để định tuyến https traffics, lẽ ra mình phải public port 443 của container sang port 443 của host (máy chủ).

Thêm - "443:443" đến phần nginx của tệp docker-compose sẽ giải quyết vấn đề này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.