Nginx多虛擬主機配置小結(jié)
最近寫公司項目,需要和前端小伙伴對接,但是有時候只是后端的一個bug,也不好意思一直讓前端小伙伴幫忙起服務(wù),所以想著直接拿測試包在本地起一個前端環(huán)境,這樣后續(xù)開發(fā)比較方便;因為公司項目有好幾個,而且要部署到同一臺服務(wù)器,nginx就成了很好的選擇;
1、什么是Nginx?
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務(wù)器,同時也提供了IMAP/POP3/SMTP服務(wù)。
Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。
2011年6月1日,nginx 1.0.4發(fā)布。其特點是占有內(nèi)存少,并發(fā)能力強
,事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。在全球活躍的網(wǎng)站中有12.18%的使用比率,大約為2220萬個網(wǎng)站。
Nginx 是一個安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務(wù)。Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠不間斷服務(wù)的情況下進行軟件版本的升級。
Nginx代碼完全用C語言從頭寫成。官方數(shù)據(jù)測試表明能夠支持高達 50,000 個并發(fā)連接數(shù)的響應(yīng)。
2、Nginx作用?
Http代理,反向代理:作為web服務(wù)器最常用的功能之一,尤其是反向代理。
正向代理(代理客戶端,類似于VPN)
反向代理(代理服務(wù)器)
Nginx提供的負載均衡策略有2種:內(nèi)置策略和擴展策略。
內(nèi)置策略為輪詢,加權(quán)輪詢,Ip hash。擴展策略,就天馬行空,只有你想不到的沒有他做不到的。
輪詢
加權(quán)輪詢
iphash:對客戶端請求的ip進行hash操作,然后根據(jù)hash結(jié)果將同一個客戶端ip的請求分發(fā)給同一臺服務(wù)器進行處理,可以解決session不共享的問題。
動靜分離,在我們的軟件開發(fā)中,有些請求是需要后臺處理的,有些請求是不需要經(jīng)過后臺處理的(如:css、html、jpg、js等等文件),這些不需要經(jīng)過后臺處理的文件稱為靜態(tài)文件。讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作。提高資源響應(yīng)的速度。
3、Nginx的安裝
windows下安裝
1、下載nginx
http://nginx.org/en/download.html 下載穩(wěn)定版本。
以nginx/Windows-1.16.1為例,直接下載 nginx-1.16.1.zip。
下載后解壓,解壓后如下:
2、啟動nginx
有很多種方法啟動nginx
(1)直接雙擊nginx.exe,雙擊后一個黑色的彈窗一閃而過
(2)打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令 nginx.exe
,回車即可
3、檢查nginx是否啟動成功
直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80 回車,出現(xiàn)以下頁面說明啟動成功!
4、配置監(jiān)聽
nginx的配置文件是conf目錄下的nginx.conf,默認配置的nginx監(jiān)聽的端口為80,如果80端口被占用可以修改為未被占用的端口即可。
當(dāng)我們修改了nginx的配置文件nginx.conf 時,不需要關(guān)閉nginx后重新啟動nginx,只需要執(zhí)行命令 nginx -s reload
即可讓改動生效
5、關(guān)閉nginx
如果使用cmd命令窗口啟動nginx, 關(guān)閉cmd窗口是不能結(jié)束nginx進程的,可使用兩種方法關(guān)閉nginx
(1)輸入nginx命令 nginx -s stop
(快速停止nginx) 或 nginx -s quit
(完整有序的停止nginx)
(2)使用taskkill taskkill /f /t /im nginx.exe
taskkill /f /t /im nginx.exe 是一個Windows命令行命令,用于強制終止運行中的名為“nginx.exe”的進程及其所有子進程。其中: /f 表示強制結(jié)束進程,不會出現(xiàn)確認提示框。 /t 表示終止指定進程及其所有子進程。 /im 表示按進程映像名稱終止進程,即根據(jù)進程名稱指定要終止的進程。 這個命令可以在Windows系統(tǒng)下使用,需要在命令行窗口中輸入。它的作用是強制終止運行中的nginx進程,適用于nginx進程崩潰或者無法正常退出等情況
linux下安裝
1、安裝gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:
yum install gcc-c++
2、PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫。nginx也需要此庫。命令:
yum install -y pcre pcre-devel
3、zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內(nèi)容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。
yum install -y zlib zlib-devel
4、OpenSSL 安裝OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序供測試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。
yum install -y openssl openssl-devel
5、下載安裝包
手動下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
下載完畢上傳到服務(wù)器上 /root
6、解壓
tar -zxvf nginx-1.18.0.tar.gzcd nginx-1.18.0
7、配置
使用默認配置,在nginx根目錄下執(zhí)行
./configuremakemake install
查找安裝路徑: whereis nginx
4、Nginx常用命令
cd /usr/local/nginx/sbin/./nginx 啟動 ./nginx -s stop 停止 ./nginx -s quit 安全退出 ./nginx -s reload 重新加載配置文件 ps aux|grep nginx 查看nginx進程
啟動成功訪問 服務(wù)器ip:80
注意:如何連接不上,檢查阿里云安全組是否開放端口,或者服務(wù)器防火墻是否開放端口!
相關(guān)命令:
# 開啟 service firewalld start # 重啟 service firewalld restart # 關(guān)閉 service firewalld stop # 查看防火墻規(guī)則 firewall-cmd --list-all # 查詢端口是否開放 firewall-cmd --query-port=8080/tcp # 開放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp # 重啟防火墻(修改配置后要重啟防火墻) firewall-cmd --reload # 參數(shù)解釋1、firwall-cmd:是Linux提供的操作firewall的一個工具;2、--permanent:表示設(shè)置為持久;3、--add-port:標(biāo)識添加的端口;
5、Nginx的配置?件
Nginx的配置?件是 nginx.conf ,?般位于 /etc/nginx/nginx.conf 。
可以使? nginx -t
來查看配置?件的位置和檢查配置?件是否正確。
配置?件分為以下?個部分:
# 全局塊 worker_processes 1; events { # events塊 } http { # http塊 server { # server塊 location / { # location塊 } } }
5.1、 全局塊
全局塊是配置?件的第?個塊,也是配置?件的主體部分,主要?來設(shè)置?些影響Nginx服務(wù)器整體運?的配置指令,主要包括配置運?Nginx服務(wù)器的?戶(組)、允許?成的worker process數(shù)、進程PID存放路徑、?志存放路徑和類型以及配置?件引?等。
# 指定運?Nginx服務(wù)器的?戶,只能在全局塊配置 # 將user指令注釋掉,或者配置成nobody的話所有?戶都可以運? # user [user] [group] # user nobody nobody; user nginx; # 指定?成的worker進程的數(shù)量,也可使??動模式,只能在全局塊配置 worker_processes 1; # 錯誤?志存放路徑和類型 error_log /var/log/nginx/error.log warn; # 進程PID存放路徑 pid /var/run/nginx.pid;
5.2、events塊
events { # 指定使?哪種?絡(luò)IO模型,只能在events塊中進?配置 # use epoll # 每個worker process允許的最?連接數(shù) worker_connections 1024; }
5.3、 http塊
http塊是配置?件的主要部分,包括http全局塊和server塊。
http { # nginx 可以使?include指令引?其他配置?件 include /etc/nginx/mime.types; # 默認類型,如果請求的URL沒有包含?件類型,會使?默認類型 default_type application/octet-stream; # 默認類型 # 開啟?效?件傳輸模式 sendfile on; # 連接超時時間 keepalive_timeout 65; # access_log ?志存放路徑和類型 # 格式為:access_log <path> [format [buffer=size] [gzip[=level]][flush=time] [if=condition]]; access_log /var/log/nginx/access.log main; # 定義?志格式 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # 設(shè)置sendfile最?傳輸?段??,默認為0,表示不限制 # sendfile_max_chunk 1m; # 每個連接的請求次數(shù) # keepalive_requests 100; # keepalive超時時間 keepalive_timeout 65; # 開啟gzip壓縮 # gzip on; # 開啟gzip壓縮的最??件?? # gzip_min_length 1k; # gzip壓縮級別,1-9,級別越?壓縮率越?,但是消耗CPU資源也越多 # gzip_comp_level 2; # gzip壓縮?件類型 # gzip_types text/plain application/javascript application/xjavascript text/css application/xml text/javascript application/x-httpdphp image/jpeg image/gif image/png; # upstream指令?于定義?組服務(wù)器,?般?來配置反向代理和負載均衡 upstream www.example.com { # ip_hash指令?于設(shè)置負載均衡的?式,ip_hash表示使?客戶端的IP進?hash,這樣可以保證同?個客戶端的請求每次都會分配到同?個服務(wù)器,解決了session共享的問題 ip_hash; # weight ?于設(shè)置權(quán)重,權(quán)重越?被分配到的?率越? server 192.168.50.11:80 weight=3; server 192.168.50.12:80; server 192.168.50.13:80; } server { proxy_pass http://www.example.com; # 參考server塊的配置 } }
5.4、server塊
server塊是配置虛擬主機的,?個http塊可以包含多個server塊,每個server塊就是?個虛擬主機。
server { # 監(jiān)聽IP和端? # listen的格式為: # listen [ip]:port [default_server] [ssl] [http2] [spdy][proxy_protocol] [setfib=number] [fastopen=number] [backlog=number]; # listen指令?常靈活,可以指定多個IP和端?,也可以使?通配符 # 下?是?個實際的例?: # listen 127.0.0.1:80; # 監(jiān)聽來?127.0.0.1的80端?的請求 # listen 80; # 監(jiān)聽來?所有IP的80端?的請求 # listen *:80; # 監(jiān)聽來?所有IP的80端?的請求,同上 # listen 127.0.0.1; # 監(jiān)聽來?來?127.0.0.1的80端?,默認端?為80 listen 80; # server_name ?來指定虛擬主機的域名,可以使?精確匹配、通配符匹配和正則匹配等?式 # server_name example.org www.example.org; # 精確匹配 # server_name *.example.org; # 通配符匹配 # server_name ~^www\d+\.example\.net$; # 正則匹配 server_name localhost; # location塊?來配置請求的路由,?個server塊可以包含多個location塊,每個location塊就是?個請求路由 # location塊的格式是: # location [=|~|~*|^~] /uri/ { ... } # = 表示精確匹配,只有完全匹配上才能?效 # ~ 表示區(qū)分??寫的正則匹配 # ~* 表示不區(qū)分??寫的正則匹配 # ^~ 表示普通字符匹配,如果匹配成功,則不再匹配其他location # /uri/ 表示請求的URI,可以是字符串,也可以是正則表達式 # { ... } 表示location塊的配置內(nèi)容 location / { # root指令?于指定請求的根?錄,可以是絕對路徑,也可以是相對路徑 root /usr/share/nginx/html; # 根?錄 # index指令?于指定默認?件,如果請求的是?錄,則會在?錄下查找默認?件 index index.html index.htm; # 默認?件 } # 下?是?些location的示例: location = / { # 精確匹配請求 root /usr/share/nginx/html; index index.html index.htm; } location ^~ /images/ { # 匹配以/images/開頭的請求 root /usr/share/nginx/html; } location ~* \.(gif|jpg|jpeg)$ { # 匹配以gif、jpg或者jpeg結(jié)尾的請求 root /usr/share/nginx/html; } location !~ \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg結(jié)尾的請求 root /usr/share/nginx/html; } location !~* \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg結(jié)尾的請求 root /usr/share/nginx/html; } # error_page ?于指定錯誤??,可以指定多個,按照優(yōu)先級從?到低依次查找 error_page 500 502 503 504 /50x.html; # 錯誤?? location = /50x.html { root /usr/share/nginx/html; } }
6、實踐
反向代理:
server { listen 9001; server_name localhost; location ~ /eduservice/ { proxy_pass http://localhost:8001; } location ~ /eduoss/ { proxy_pass http://localhost:8002; } location ~ /eduvod/ { proxy_pass http://localhost:8003; } location ~ /educms/ { proxy_pass http://localhost:8004; } location ~ /edumsm/ { proxy_pass http://localhost:8005; } location ~ /educenter/ { proxy_pass http://localhost:8160; } location ~ /eduorder/ { proxy_pass http://localhost:8007; } location ~ /staservice/ { proxy_pass http://localhost:8008; } }
多虛擬主機:
- 一個server塊即一個虛擬主機
server { listen 81; server_name 192.168.72.49; #charset koi8-r; #access_log logs/host.access.log main; location / { root html-81; index index.html index.htm; } } server { listen 82; server_name 192.168.72.49; #charset koi8-r; #access_log logs/host.access.log main; location / { root html-82; index index.html index.htm; } }
到此這篇關(guān)于Nginx多虛擬主機配置小結(jié)的文章就介紹到這了,更多相關(guān)Nginx多虛擬主機內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!