Nginx

配置 Google Domains、EC2 和 Nginx

  • May 28, 2017

在嘗試配置域名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頁面。有人可以指出我正確的方向嗎?

這是一些上下文:

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
}

引用自:https://serverfault.com/questions/852626