Ubuntu中Nginx虛擬主機(jī)設(shè)置的項(xiàng)目實(shí)踐
簡介
Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,廣泛用于托管多個(gè)網(wǎng)站或應(yīng)用。通過配置虛擬主機(jī)(Virtual Hosts),可以在同一臺服務(wù)器上運(yùn)行多個(gè)獨(dú)立的網(wǎng)站。本文將指導(dǎo)你如何在 Nginx 中設(shè)置虛擬主機(jī)。
安裝 Nginx
確保你的服務(wù)器已經(jīng)安裝了 Nginx。如果沒有,可以使用以下命令進(jìn)行安裝:
sudo apt update sudo apt install nginx
安裝完成后,可以通過以下命令啟動并啟用 Nginx:
sudo systemctl start nginx sudo systemctl enable nginx
創(chuàng)建虛擬主機(jī)
1. 創(chuàng)建網(wǎng)站目錄
為每個(gè)虛擬主機(jī)創(chuàng)建一個(gè)單獨(dú)的目錄來存放網(wǎng)站文件。例如,為 example.com
創(chuàng)建目錄:
sudo mkdir -p /var/www/example.com/html sudo chmod -R 755 /var/www/example.com
2. 創(chuàng)建默認(rèn)索引文件
在網(wǎng)站目錄中創(chuàng)建一個(gè)簡單的 index.html
文件:
echo "<html><body><h1>Welcome to example.com!</h1></body></html>" | sudo tee /var/www/example.com/html/index.html
3. 配置 Nginx
編輯或創(chuàng)建一個(gè)新的虛擬主機(jī)配置文件。通常,這些文件位于 /etc/nginx/sites-available/
目錄下。例如,創(chuàng)建 example.com
的配置文件:
sudo nano /etc/nginx/sites-available/example.com
添加以下內(nèi)容到配置文件中:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 可選:啟用目錄列表 # location / { # autoindex on; # try_files $uri $uri/ =404; # } }
保存并關(guān)閉文件。
4. 啟用虛擬主機(jī)
創(chuàng)建一個(gè)符號鏈接,將配置文件鏈接到 /etc/nginx/sites-enabled/
目錄,以啟用該虛擬主機(jī):
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
禁用默認(rèn)的 Nginx 配置(如果不需要):
sudo rm /etc/nginx/sites-enabled/default
配置文件結(jié)構(gòu)
Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
,而虛擬主機(jī)的配置文件通常位于 /etc/nginx/sites-available/
。你可以通過創(chuàng)建符號鏈接到 /etc/nginx/sites-enabled/
來啟用這些配置文件。
示例配置文件
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 訪問日志和錯誤日志 access_log /var/log/nginx/example.com.access.log combined; error_log /var/log/nginx/example.com.error.log warn; }
設(shè)置訪問日志和錯誤日志
為了更好地監(jiān)控和調(diào)試,建議為每個(gè)虛擬主機(jī)設(shè)置獨(dú)立的訪問日志和錯誤日志。你可以在 server
塊中添加以下指令:
access_log /var/log/nginx/example.com.access.log combined; error_log /var/log/nginx/example.com.error.log warn;
這將為 example.com
創(chuàng)建獨(dú)立的日志文件,分別記錄訪問請求和錯誤信息。
處理 403 Forbidden 錯誤
如果你遇到 403 Forbidden
錯誤,可能是由于以下原因:
沒有設(shè)置 index
文件:
確保網(wǎng)站目錄中存在一個(gè)默認(rèn)的索引文件(如 index.html
或 index.htm
)。
在 server
塊中添加 index
指令,指定要使用的索引文件。
禁用了目錄列表:
如果你希望用戶能夠訪問目錄內(nèi)容,但不想提供默認(rèn)的索引文件,可以在 location
塊中添加 autoindex on;
。
文件和目錄權(quán)限問題:
確保 Nginx 運(yùn)行的用戶(通常是 www-data
)有權(quán)限讀取網(wǎng)站目錄及其文件。
使用以下命令設(shè)置正確的權(quán)限:
sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com
SELinux 或 AppArmor 設(shè)置:
如果系統(tǒng)啟用了 SELinux 或 AppArmor,這些安全模塊可能會限制 Nginx 訪問文件。你可以通過以下命令查看狀態(tài):
sudo aa-status sudo sestatus
測試和重啟 Nginx
在對配置文件進(jìn)行任何更改后,記得測試 Nginx 配置是否正確,并重新加載或重啟 Nginx 服務(wù):
sudo nginx -t sudo systemctl reload nginx # 或者 sudo service nginx reload
Nginx 目錄重要文件和目錄
主要目錄和文件
- /etc/nginx/nginx.conf: Nginx 的主配置文件。
- /etc/nginx/sites-available/: 存放虛擬主機(jī)配置文件的目錄。
- /etc/nginx/sites-enabled/: 存放已啟用的虛擬主機(jī)配置文件的目錄。
- /var/log/nginx/: 存放 Nginx 日志文件的目錄。
- /var/www/: 存放網(wǎng)站文件的目錄。
圖片中的文件和目錄
根據(jù)提供的圖片,以下是重要的文件和目錄:
- conf.d: 存放額外配置文件的目錄。
- modules-available: 存放可用模塊的目錄。
- modules-enabled: 存放已啟用模塊的目錄。
- sites-available: 存放虛擬主機(jī)配置文件的目錄。
- sites-enabled: 存放已啟用虛擬主機(jī)配置文件的目錄。
server_name 指令詳解
server_name
指令用于指定 Nginx 應(yīng)響應(yīng)哪些域名的請求。它是一個(gè)非常重要的指令,特別是在配置虛擬主機(jī)時(shí)。以下是 server_name
的詳細(xì)說明和常見用法:
語法
server_name domain.tld [domain2.tld ...];
常見用法
單個(gè)域名:
如果你只有一個(gè)域名,可以直接在 server_name
后面寫上該域名:
server { listen 80; server_name example.com; # 其他配置... }
多個(gè)域名:
如果你有多個(gè)域名指向同一個(gè)網(wǎng)站,可以在 server_name
后面列出所有域名,用空格分隔:
server { listen 80; server_name example.com www.example.com; # 其他配置... }
帶通配符的域名:
如果你有一組子域名,可以使用通配符來匹配這些子域名。例如,*.example.com
可以匹配所有 example.com
的子域名:
server { listen 80; server_name *.example.com; # 其他配置... }
IP 地址:
你也可以使用 IP 地址作為 server_name
,這在測試環(huán)境中特別有用:
server { listen 80; server_name 192.168.1.100; # 其他配置... }
默認(rèn)服務(wù)器:
如果你不指定 server_name
或者希望 Nginx 響應(yīng)所有未匹配到其他 server_name
的請求,可以使用下劃線 _
作為 server_name
,或者省略 server_name
并使用 default_server
參數(shù):
server { listen 80 default_server; # 或者 server_name _; # 其他配置... }
特殊情況
精確匹配:
你可以使用 =
來進(jìn)行精確匹配,只有當(dāng)請求的域名完全匹配時(shí)才會生效:
server { listen 80; server_name = example.com; # 其他配置... }
正則表達(dá)式:
你可以使用正則表達(dá)式來匹配復(fù)雜的域名模式。正則表達(dá)式需要以 ~
開頭:
server { listen 80; server_name ~^(www\.)?(?<domain>.+)$; # 其他配置... }
在這個(gè)例子中,www.example.com
和 example.com
都會匹配,并且你可以通過 $domain
變量獲取去掉 www.
后的域名。
注意事項(xiàng)
- DNS 解析:確保你的域名已經(jīng)正確解析到服務(wù)器的 IP 地址。你可以通過
ping
或nslookup
命令檢查域名解析是否正確。 - SSL/TLS 配置:如果你使用 HTTPS,還需要配置 SSL 證書和密鑰,并將
listen
指令改為listen 443 ssl;
。 - 防火墻設(shè)置:確保服務(wù)器的防火墻允許 HTTP (80) 和 HTTPS (443) 端口的流量。
示例:完整的虛擬主機(jī)配置
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 訪問日志和錯誤日志 access_log /var/log/nginx/example.com.access.log combined; error_log /var/log/nginx/example.com.error.log warn; }
參考資源
總結(jié)
通過以上步驟,你應(yīng)該能夠在 Nginx 中成功設(shè)置虛擬主機(jī)。server_name
指令是配置虛擬主機(jī)的關(guān)鍵部分,確保你正確設(shè)置了域名、通配符或其他匹配規(guī)則。如果有任何問題,請檢查 Nginx 的錯誤日志,尋找更多線索。希望這篇筆記能幫助你順利配置 Nginx 虛擬主機(jī)!
到此這篇關(guān)于Ubuntu中Nginx虛擬主機(jī)設(shè)置的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)Nginx虛擬主機(jī)設(shè)置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx實(shí)現(xiàn)三種常見的虛擬主機(jī)配置方法
- Nginx多虛擬主機(jī)配置小結(jié)
- nginx基于IP的多虛擬主機(jī)實(shí)現(xiàn)
- Nginx虛擬主機(jī)的配置實(shí)現(xiàn)
- Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式小結(jié)
- Nginx虛擬主機(jī)的六種配置(最全)
- Nginx虛擬主機(jī)的配置步驟過程全解
- 關(guān)于Nginx中虛擬主機(jī)的一些冷門知識小結(jié)
- Nginx虛擬主機(jī)的搭建的實(shí)現(xiàn)步驟
- nginx配置虛擬主機(jī)的詳細(xì)步驟
- 深入淺析Nginx虛擬主機(jī)
相關(guān)文章
Ubuntu系統(tǒng)下的Nginx服務(wù)器軟件安裝時(shí)的常見錯誤解決
這篇文章主要介紹了Ubuntu系統(tǒng)下的Nginx服務(wù)器軟件安裝時(shí)的常見問題解決,包括徹底卸載Nginx的方法介紹,需要的朋友可以參考下2016-03-03Linux下安裝MongoDB的實(shí)現(xiàn)步驟
這篇文章主要介紹了Linux下安裝MongoDB的實(shí)現(xiàn)步驟的相關(guān)資料,希望通過本文能幫助到大家,讓大家輕松安裝,需要的朋友可以參考下2017-10-10Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼
這篇文章主要介紹了Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Nginx 流量控制/限流的具體實(shí)現(xiàn)示例
限流是一種流量控制手段,用于限制單位時(shí)間內(nèi)可以通過系統(tǒng)的請求數(shù)或連接數(shù),本文主要介紹了Nginx流量控制/限流的具體實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07Nginx IP封禁及自動封禁IP的實(shí)現(xiàn)
本文主要介紹了Nginx IP封禁及自動封禁IP的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01利用Nginx的map指令實(shí)現(xiàn)頁面跳轉(zhuǎn)
每位網(wǎng)站運(yùn)營人可能都會碰到一些情況,比如網(wǎng)站URL規(guī)則會進(jìn)行調(diào)整,需求的不斷變化也會導(dǎo)致一些舊的URL無法訪問,這個(gè)時(shí)候可以使用Nginx的 map指令匹配這些舊的URL,并跳轉(zhuǎn)到新的URL規(guī)則,而且這種方式是在Nginx層面進(jìn)行,不會對網(wǎng)站性能產(chǎn)生影響。下面來一起看看吧。2016-10-10