Nginx
配置 Google Domains、EC2 和 Nginx
在嘗試配置域名
Google Domains
以指向我的EC2
(Ubuntu Server)實例時,我遇到了一個大問題。我設置
nginx
為反向代理來服務Django
應用程序。我還配置了一個彈性 IP 並將其與EC2
實例相關聯。當我訪問彈性 IP (34.XXX.XXX.28
) 時,我可以正常訪問應用程序。這告訴我 EC2 實例(nginx、Django 應用程序等)中的所有內容都已正確配置。問題是當我訪問我的域名時
www.mydomain.com
,我得到這個頁面:歡迎使用 nginx!
如果您看到此頁面,則 nginx Web 伺服器已成功安裝並正在執行。需要進一步配置。
有關線上文件和支持,請參閱 nginx.org。nginx.com 上提供商業支持。
感謝您使用 nginx。
我很困惑為什麼直接訪問彈性IP有效,但通過域名(
www.mydomain.com
)訪問會導致預設nginx
頁面。有人可以指出我正確的方向嗎?這是一些上下文:
- 這是我的Google Domains 配置
- 這些是我的彈性 IP 和 EC2 安全入站規則配置
- 我
nginx
的配置為監聽 80 埠。這是我的配置:upstream djangoapp { server unix:/var/www/run/djangoapp.sock; } server { listen 80; server_name 34.XXX.XXX.28; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://djangoapp ; } location /static/ { alias /var/www/djangoapp/static/; autoindex on; } }
Nginx 可以監聽同一 IP 地址上的多個網站,包括 http 和 https。現在你讓它監聽對特定 IP 的請求,而不是域名。解決方案是指定您希望它收聽的域 - 例如
server_name example.com www.example.com;
您通常應該只收聽一個域。子域應該被轉發到主域,儘管 www 或根域是否是您認為的“主域”完全取決於您。
# Main server server { listen 80; server_name example.com; // Locations etc } server { listen 80; server_name www.example.com; return 301 https://example.com$request_uri; }
您還可以任何給定的伺服器阻止“預設伺服器”。這可能是您站點的主要伺服器塊,也可能是另一個阻止您的伺服器通過 IP 響應的塊。您可能不想響應 IP,因為 Internet 會不斷被掃描
server { listen 80 default_server; server_name 1.2.3.4 example.com; }
這是一個預設伺服器,它拒絕未由特定伺服器塊處理的 IP 流量
server { listen 80 default_server; server_name _; # Wildcard, any domain is served return 444; # This means "go away", effectively }