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.confhttp 節內部的末尾寫上一句:

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.confmysite.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! 了,表示新網站創建成功。
成功創建新網站

結語

以上便是一個新網站的域名綁定的創建過程,若有您不明白或博主的錯誤之處,歡迎在評論區指正,感激不盡!

2018.12.18
個人主頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章