2012-04-10 64 views
16

我想在將配置上傳到服務器之前測試nginx子域。我可以在本地主機上測試它嗎?我試試如何測試localhost上的nginx子域

server { 
    listen  80; 
    server_name localhost; 

    location/{ 
     proxy_pass http://localhost:8080; 
    } 
} 

server { 
    listen  80; 
    server_name sub.localhost; 

    location/{ 
     proxy_pass http://localhost:8080/sub; 
    } 
} 

而且它不起作用。 Shoulld我改變我的主機文件,以使其工作?另外,上傳站點後,我應該更改DNS記錄並添加sub.mydomain.com?

回答

15

是的,將'sub.localhost 127.0.0.1'添加到您的主機文件。這個部分必須以某種方式解決。這應該工作。

然後,一旦你準備上網,是的,爲子域子添加一個a或cname記錄。

當我使用proxy_pass時,我還包含來自nginx的proxy.conf。 http://wiki.nginx.org/HttpProxyModule

+0

是的,謝謝,它的工作原理。 – madhead 2012-05-02 11:17:09

5

對於自己的域名的公開的Web服務器,你只需要使用一個CNAME記錄在您的DNS配置中添加一個規範名稱:

CNAME * example.com. 

一旦做到這一點,設置您的nginx設置

server_name *.example.com example.com; 

在您的本地設置中,您可以保留與nginx相同的配置,但除非您有本地DNS設置,否則您將不得不編輯/ etc/hosts文件並手動添加每個子域。通配符在/ etc/hosts文件中不起作用。

127.0.0.1 abc.example.com def.example.com ghi.example.com 

通常推薦使用.local作爲本地域名稱空間。

1

在基於Linux的操作系統中,編輯爲sudo/etc/hosts文件並將127.0.0.1 localhost更改爲127.0.0.1 *.localhost

所以在/etc/nginx/sites-enabled/<environment>/<your_project_name>編輯server_name鍵爲<subdomain>.localhost

重新啓動nginx服務。

$ sudo service nginx restart 

然後在url欄嘗試http://<subdomain>.localhost

它適用於我。

UPDATE

在我看來,一個更好的解決方案是創建子域,如果不存在,在/etc/nginx/sites-enabled/development/default,只有響應的虛擬服務器,默認的服務器(記住,你只能定義一個服務器作爲默認)。

server { 
    listen 80 default_server; 
    root /var/www/html/errors; 
    server_name *._; 

    location/{ 
    index 404.html; 
    } 

} 

確保在nginx.conf(一般爲/etc/nginx/nginx.conf)包含include /etc/nginx/sites-enabled/**/*;到該虛擬服務器的工作。如果沒有,則放入並運行$ sudo service nginx restart

在這種情況下,沒有必要把*.localhost/etc/hosts,但只有localhost