當(dāng)我們?cè)L問(wèn)一個(gè)網(wǎng)址,會(huì)經(jīng)由 DNS 解析為 IP 地址,這個(gè) IP 地址其實(shí)背后是「服務(wù)器」,通過(guò)這個(gè) IP 就能找到那臺(tái)服務(wù)器。我們看似使用的是域名訪問(wèn)網(wǎng)站,其實(shí)使用的是 IP 地址。服務(wù)器上通常會(huì)安裝 Nginx,它是一個(gè)專(zhuān)門(mén)用來(lái)處理 Web 請(qǐng)求的軟件。用戶訪問(wèn)網(wǎng)站時(shí),請(qǐng)求就會(huì)先到 Nginx,然后由它把請(qǐng)求轉(zhuǎn)發(fā)到項(xiàng)目上。正常情況下,服務(wù)器會(huì)開(kāi)啟兩個(gè)端口:80 和 443。上次說(shuō)過(guò),80 是不加密的傳輸方式,不安全;而 443 是加密的,更安全。所以一般我們會(huì)把 80 的請(qǐng)求自動(dòng)跳轉(zhuǎn)到 443,讓用戶始終通過(guò)安全連接訪問(wèn)網(wǎng)站,詳情訪問(wèn)之前的文章HTTP 如何升級(jí)成 HTTPSNginx 簡(jiǎn)單來(lái)說(shuō)就是:接收請(qǐng)求,路由轉(zhuǎn)發(fā),接入多個(gè)項(xiàng)目或子域名,我們來(lái)看看如何配置。其配置結(jié)構(gòu)主要包含以下幾個(gè)部分:server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /var/www/error_pages;
}
}
以上文件解釋一下:監(jiān)聽(tīng)了 80 端口,綁定了域名 example.com。當(dāng)用戶訪問(wèn)這個(gè)域名時(shí),請(qǐng)求會(huì)進(jìn)入根路徑/,對(duì)應(yīng)的本地目錄是 /var/www/html,默認(rèn)加載 index.html 或 index.htm。如果訪問(wèn)的頁(yè)面不存在(返回 404 錯(cuò)誤),則跳轉(zhuǎn)到自定義的 404.html 頁(yè)面,這個(gè)錯(cuò)誤頁(yè)面放在 /var/www/error_pages 目錄下。我們推薦使用多配置文件來(lái)解決這個(gè)問(wèn)題,這樣更清晰、直觀。http {
include /etc/nginx/conf.d/*.conf;
}
我們先來(lái)生成一個(gè)默認(rèn)配置文件,這里處理所有域名的匹配,如果有更精準(zhǔn)的匹配,則會(huì)采用更精準(zhǔn)匹配模式。/etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /path/to/default.pem;
ssl_certificate_key /path/to/default.key;
return 444;
}
然后我們?yōu)槊總€(gè)子域名來(lái)創(chuàng)建單獨(dú)的配置文件,文件位置:/etc/nginx/conf.d/domain1.conf
server {
listen 80;
server_name domain1.com www.domain1.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name domain1.com www.domain1.com;
ssl_certificate /path/to/cert.pem*;
ssl_certificate_key /path/to/key.pem*;
root /var/www/domain1;
index index.html;
}
/etc/nginx/conf.d/domain2.conf
server {
listen 80;
server_name domain2.com www.domain2.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name domain2.com www.domain2.com;
ssl_certificate /path/to/cert.pem*;
ssl_certificate_key /path/to/key.pem*;
root /var/www/domain2;
index index.html;
}
server {
listen 80;
server_name *.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name *.example.com;
ssl_certificate /path/to/wildcard.pem*;
ssl_certificate_key /path/to/wildcard.key*;
set $subdomain "";
if ($host ~* ^([^\\.]+)\\.example\\.com$) {
set $subdomain $1;
}
root /var/www/$subdomain;
index index.html;
}
常用于高并發(fā)場(chǎng)景下,將用戶請(qǐng)求平均或按權(quán)重分配到多臺(tái)后端服務(wù)器,提升網(wǎng)站穩(wěn)定性和響應(yīng)速度。因?yàn)槲也](méi)有參與過(guò)負(fù)載均衡的服務(wù)配置,這個(gè)章節(jié)很重要,但我沒(méi)有實(shí)際操作經(jīng)驗(yàn),以下只為示例:http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com backup;
}
server {
listen 80;
location / {
proxy_pass <http://backend>;
}
}
}
這段配置實(shí)現(xiàn)了 Nginx 的反向代理 + 負(fù)載均衡功能:使用 upstream 定義了一個(gè)名為 backend 的服務(wù)器組,里面有三個(gè)后端服務(wù):-> 權(quán)重為 5(被優(yōu)先使用)-> 標(biāo)記為 backup,只在前兩個(gè)都掛掉時(shí)啟用外部請(qǐng)求訪問(wèn) 80 端口的 / 路徑時(shí),會(huì)被 proxy_pass 轉(zhuǎn)發(fā)到這個(gè) backend 服務(wù)器組,實(shí)現(xiàn)請(qǐng)求分流。Nginx 修改完配置以后,一定要重啟,否則不會(huì)生效。
閱讀原文:原文鏈接
該文章在 2025/7/2 0:37:39 編輯過(guò)