歡迎您光臨本站 註冊首頁

Nginx定義域名訪問方式

←手機掃碼閱讀     hongdian2012 @ 2020-05-14 , reply:0

最近在搭建Nginx,做到域名訪問的時候總是訪問不了。 nginx的配置文件nginx.conf中server配置如下: server { listen 80; server_name hehe.weige.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root html-hehe; index index.html index.htm; } } 配置完之後 在sbin 目錄下執行命令 ./nginx -s reload 重新加載配置文件 加載之後瀏覽器地址欄輸入hehe.weige.com 一直訪問不了 就這個問題困擾了大半天。 搜索了好多大神的博客,配置沒有任何問題。後面終於自己想到了。在這裡強調兩個最基礎最簡單的問題 1 同一個域名只能對應一個IP,同一個IP可以對應多個域名 2 當訪問網站是系統會先去你本地的hosts(C:windowssystem32driversetc)文件中查找,如果存在該域名就會訪問該域名對應的IP, 如果不存在才會去互聯網尋找。 重點看第二點,我本地的hosts文件根本就沒有配置www.weige.com這個域名,於是去互聯網查找。而這個域名是我自定義的,互聯網肯定是查不到的。所以訪問失敗 出現了第一張圖的情況。各位大神的博客都沒有強調這個問題,是他們疏忽了還是我基礎太爛了呢???? 哎!不抱怨了。配置完hosts之後如下圖 然後重啟電腦(不重啟電腦我不知道有沒有辦法做到,如果讀者有辦法麻煩給分享一下,謝謝!) 再次在瀏覽器輸入hehe.weige.com 訪問成功。 補充知識:Nginx 指定域名(或子域名)和網站綁定 問題起因 博主最近在 CentOS 上面部署另外一個網站,但並不想通過端口號來訪問,因為端口號對於 SEO 優化不利,且用戶訪問較繁瑣(使用域名不就是為了方便用戶訪問嗎?再引入端口號豈不是和使用域名的目的相悖嗎?),因此想在 CentOS 的 80 端口上同時運行兩個網站,nginx 通過請求的域名來返回相應的根目錄下的網站,達到 80 端口複用,同時運行多個網站的目的。 實現步驟 為方便您檢查路徑,本文在需要對路徑進行要求時,專門使用 pwd 命令打印出博主當前步驟所在路徑,便於您檢查。 檢查 nginx 配置文件路徑(重要) 注意:這一步非常關鍵,如果修改了錯誤的 nginx 配置文件,將導致所有修改均無效,甚至會讓您在探索了數個小時後仍無法得知修改無效的原因是什麼。 使用命令 $ nginx -V 來查看 nginx 的一些配置信息,如下(您的和博主的顯示內容可能不同,不影響): nginx version: nginx/1.12.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' 其中只需要關注到 --conf-path=/etc/nginx/nginx.conf 這個條目,這個條目指明瞭當前 nginx 的程序使用的默認配置文件。 新建一個站點配置文件 根據上面的配置文件路徑,首先切換目錄到 nginx 的配置路徑下: $ cd /etc/nginx 然後新建一個站點配置文件,建議放置在 nginx 配置目錄下的 vhost 目錄內,如果您當前沒有此目錄,可新建一個: $ pwd /etc/nginx $ sudo mkdir vhost $ ls conf.d fastcgi_params mime.types scgi_params vhost default.d fastcgi_params.default mime.types.default scgi_params.default win-utf fastcgi.conf koi-utf nginx.conf uwsgi_params fastcgi.conf.default koi-win nginx.conf.default uwsgi_params.default 注意:/etc 是系統目錄,一般用戶不具有修改權限,需要使用 sudo 以管理員權限在該目錄中進行修改,如創建、修改文件,創建文件夾等操作。 進入剛剛創建的 vhost 目錄,新建一個配置文件,例如 mysite.conf,該配置文件文件名無限制,最好是你的網站名稱之類的,便於辨認,但一定是以 .conf 為後綴。

 $ pwd /etc/nginx

 $ cd vhost/ 

$ pwd /etc/nginx/vhost 

$ sudo touch mysite.conf 

$ ls mysite.conf trans.conf 其中,touch 命令創建了一個名為 mysite.conf 的配置文件(空文件),是本文中要介紹的配置文件,另一個是博主正在運行的網站,無需在意。 修改網站配置文件信息 本文中將建立一個名為 mysite 的網站,網站根目錄為 /home/www/mysite,網站綁定域名 mysite.jinhangdev.cn。 使用任意文字編輯器打開 mysite.conf,輸入如下內容並保存(注意需管理員權限): server { listen 80; # 網站的端口一般為 80,可以與其他網站一起使用該端口 server_name mysite.jinhangdev.cn; # 要綁定的域名(或子域名) root /home/www/mysite; # 該網站的根目錄 location / { # 不用管 } } 以上內容為一個 server 的內容,下面講 nginx.conf 配置的時候會再區分把一行配置寫在 server 或寫在 server 外的區別。 $ pwd /etc/nginx/vhost $ ls mysite.conf trans.conf $ sudo vim mysite.conf $ cat mysite.conf server { listen 80; server_name mysite.jinhangdev.cn; root /home/www/mysite; location /{ } } 上面我們已經新建好了一個網站,該網站使用服務器的 80 端口,綁定的域名為 mysite.jinhangdev.cn,網站根目錄使用 /home/www/mysite。 修改 nginx 配置文件 下面對關鍵文件 nginx.conf 進行配置,建議在修改前先備份,養成好的習慣: $ pwd /etc/nginx $ sudo cp nginx.conf nginx.conf.bak 將原有配置存儲到 nginx.conf.bak 後,繼續下面操作,若後面發現修改出錯,可將 nginx.conf.bak 改名回 nginx.conf 使用。 以超級用戶權限使用文本編輯器打開 nginx.conf: $ sudo vim nginx.conf 並進行編輯。 Nginx 配置文件的結構 我們這裡只介紹和配置域名綁定相關的部分結構,即 http 小節: http { (各種配置) } 設置在此處的配置都是 http 的全局配置,如果要對某個網站單獨配置,則需要對每個 server 分別設置: http { (此處的配置是全局的配置參數) server { (此處的配置是本 server 的配置參數) } server { (此處的配置是本 server 的配置參數) } (此處的配置是全局的配置參數) } 但是我們並不提倡把所有 server 都展開寫在 nginx.conf 中,因此我們使用一句 include 語句,把 vhost 下所有網站的配置都引用進來。注意:include 命令只是簡單地進行文本替換。 於是我們在 nginx.conf 的 http 節內部的末尾寫上一句: http { (前面的若干配置) include /etc/nginx/vhost/*.conf; } 這樣一來,vhost 下的所有 .conf 文件均被文本替換式地引入到 nginx.conf 裡面了。 

重啟 nginx 服務 使用命令: 

$ sudo service nginx restart 

Redirecting to /bin/systemctl restart nginx.service 

重啟 nginx 服務。 

出現問題:重啟服務報錯 此時可使用命令: $ sudo service nginx status -l 來查看報錯信息和錯誤日誌。輸入此命令後,日誌不會馬上顯示出來,稍等幾秒會顯示出來,-l 選項使得每條日誌能夠完整顯示在屏幕上,否則當一條日誌過長時,中間的文本將被 ... 替代。 若出現問題,十有八九日誌都會說是載入 nginx.conf 出錯,這多半是因為您在 nginx.conf 或 mysite.conf 中有錯誤的配置。 訪問新網站 為新的二級域名添加 DNS 解析後,在瀏覽器中訪問 mysite.jinhangdev.cn,正常情況下會報 404 Not found 的錯誤,這是因為本文到目前為止還沒有去創建這個新網站的根目錄,出現 404 錯誤反而說明前面的配置是正確的,所以下一步我們將創建一個簡單的網頁運行起來。 建立新網站的根目錄(或使用已有目錄) 博主習慣將網站的文件放在 /home/www 下,並給該目錄 0777 權限,以免出現 403 錯誤,雖然這樣不太安全。鑑於博主水平有限,希望有安全需求的讀者關注其他安全大牛的文章,博主深表歉意。 

在 /home/www 下建立目錄 mysite(/home/www 目錄已經被博主創建好,並使用 chmod 命令賦予其 0777 權限): 

$ cd /home/www/ 

$ mkdir mysite 

$ ls mysite trans 切換到 mysite 目錄下,簡單創建一個網頁:

$ pwd /home/www 

$ cd mysite/

 $ echo hello! > index.html $ ls index.html $ cat index.html hello! 此時在瀏覽器中重新訪問,即可看到一行 hello! 了,表示新網站創建成功。


[hongdian2012 ] Nginx定義域名訪問方式已經有137次圍觀

http://coctec.com/docs/nginx/show-post-234517.html