Nginx

為什麼 nginx 不能在 LightSail 上處理我的子域 A 記錄?

  • May 17, 2021

我在 LightSail 上有一台 Ubuntu 機器,它使用 nginx 提供靜態文件。

我想要一個子域,所以我添加了一個指向名為client.mydomain.com.

我的 nginx 站點配置文件定義為

server {
       listen 5000;
       server_name client.mydomain.com;

       location / {
               root /home/ubuntu/client-data;
       }
}

雖然我可以通過 http:// 訪問客戶端數據中的文件

$$ ip $$/file.txt http://client.mydomain.com/file.txt返回 301 Permanent Moved 錯誤。 為什麼?是不是因為我已經有一個執行在 80 和 8080 埠的 nginx 站點。為什麼子域不能使用 5000 的正確站點?

預設情況下,當使用 HTTP 或 HTTPS 時,您的客戶端(Internet-Browser/Utility)將使用預設埠 80/443 連接到您的伺服器。

否則,如果您使用,例如在您的情況下,即http://client.mydomain.com:5000/file.txt,您將按預期請求該文件,因為您在此處在埠 5000 上配置此伺服器,該文件將是在存在的情況下提供服務。

如果您已經在埠 80 上定義了下面的預設 server_name 範例,範例:

server {
       #listen <PORT>
       listen 80;
       #server_name _invalid_name_for_default_server_
       server_name _default_;
       #location defines WHAT can/should be found WHERE
       location / {
               root /home/ubuntu/client-data;
       }
}

在使用域名訪問您的伺服器時,它通常會連接到埠 80,然後使用 server_name 查找已配置的伺服器塊以驗證它是否存在,否則,如果已配置,它將提供預設頁面。

你的塊解釋說:

server {
       #listen <PORT>
       listen 5000;
       #server_name domain_to.listen
       server_name client.mydomain.com;
       #location defines what can be found WHERE
       location / {
               root /home/ubuntu/client-data;
       }
}

如果您想使用 client1.mydomain.com/myfile.txt 請求它:

將“監聽”設置為埠 80。如果您隨後連接到您的伺服器,它將解析 server_name 指令。例如:

server {
       listen 80;
       server_name client1.mydomain.com;

       location / {
                root /home/ubuntu/client-data;
       }
}

此外,如果出於某種原因您也想喜歡,請監聽兩個埠:

server {
       listen 80;
       listen 5000;
       server_name client1.mydomain.com;

       location / {
                root /home/ubuntu/client-data;
       }
}

另請閱讀:https ://nginx.org/en/docs/http/server_names.html

我們希望我們能幫助您,如果您想提高客戶的最大數量,聽錯了 :-)

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