簡介
是一個高性能的 HTTP 和反向代理服務器,特點是占有記憶體少,并發能力強,事實上 nginx 的并發能力確實在同型別的網頁服務器中表現較好,
Nginx 可以作為靜態頁面的 web 服務器,同時還支持 CGI 協議的動態語言,比如 perl、php 等,但是不支持 Java,Java 程式只能通過與 tomcat 配合完成,Nginx 專為性能優化而開發, 性能是其最重要的考量,實作上非常注重效率 ,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數,
安裝
安裝編譯工具及庫檔案
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
在下載的程序中提示
正 在 嘗 試 其 它 鏡 像的話,就繼續等待吧,總會有成功的一次,
安裝 PCRE
PCRE 作用是讓 Nginx 支持 Rewrite 功能,
下載 PCRE 安裝包,下載地址:https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
網盤下載地址
wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
-rw-r--r--. 1 root root 2096552 6月 22 2021 pcre-8.45.tar.gz
解壓安裝包
[root@localhost src]# tar zxvf pcre-8.45.tar.gz
進入安裝包目錄編譯安裝
[root@localhost src]# cd pcre-8.45
[root@localhost pcre-8.45]# ./configure
[root@localhost pcre-8.45]# make && make install
查看 pcre 版本
[root@localhost pcre-8.45]# pcre-config --version
8.45
安裝 Nginx
下載地址:https://nginx.org/download/nginx-1.21.6.tar.gz
[root@localhost local]# wget https://nginx.org/download/nginx-1.21.6.tar.gz
解壓安裝包
[root@localhost local]# tar zxvf nginx-1.21.6.tar.gz
編譯安裝
[root@localhost local]# cd nginx-1.21.6
[root@localhost nginx-1.21.6]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/src/pcre-8.45
[root@localhost nginx-1.21.6]# make
[root@localhost nginx-1.21.6]# make install
查看 Nginx 版本
[root@localhost sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.21.6
常用命令
啟動 Nginx
[root@localhost /]# /usr/local/nginx/sbin/nginx
檢查組態檔的準確性
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重新載入組態檔
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s reload
重啟 Nginx
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s reopen
停止 Nginx
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s stop
組態檔解讀
#user nobody;
# 這是 Nginx 服務器并發處理服務的關鍵配置,worker_processes 值越大,可以支持的并發處理量也越多,但是會受到硬體、軟體等設備的制約
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
# events 涉及的指令主要影響 Nginx 服務器與用戶的網路連接
events {
# 支持的最大連接數是多少
worker_connections 1024;
}
# 包含 http 全域塊和 server 塊
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
# 監聽的埠號
listen 80;
# 主機名稱
server_name localhost;
location / {
root html;
index index.html index.htm;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
組態檔正則運算式
location [ = | ~ | ~* | ^~ ] uri {
}
- = :用于不含正則運算式的 uri 前,要求請求字串與 uri 嚴格匹配,如果匹配 成功,就停止繼續向下搜索并立即處理該請求,
- ~ :用于表示 uri 包含正則運算式,并且區分大小寫,
- ~* :用于表示 uri 包含正則運算式,并且不區分大小寫,
- ^~ :用于不含正則運算式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字 符串匹配度最高的 location 后,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字串做匹配,
注意:如果 uri 包含正則運算式,則必須要有 ~ 或者 ~ 標識,*
正反向代理
正向代理代理客戶端,反向代理代理服務器,正向代理跟客戶端同一局域網,反向代理跟服務器在同一局域網,
正向代理
如果把局域網外的Internet想象成一個巨大的資源庫,則局域網中的客戶端要訪問Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理,

反向代理
反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只 需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器 IP 地址,

案例展示
簡單案例
組態檔修改
server {
# 監聽的埠
listen 80;
# 監聽的地址名稱
server_name 192.168.3.40;
location / {
root html;
# 代理的地址
proxy_pass http://192.168.3.28:2222;
index index.html index.htm;
}
}
根據路徑跳轉到不同的代理上
組態檔修改
server {
listen 8001;
server_name 192.168.3.40;
location ~ /buy_goods2 {
proxy_pass http://192.168.3.28:2222;
}
location ~ /buy_goods1 {
proxy_pass http://192.168.3.28:1111;
}
}
負載均衡
單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們 所說的負載均衡,
案例展示
http 塊中增加一下配置資訊:
upstream myserver {
server 192.168.3.28:1111;
server 192.168.3.28:2222;
}
server 塊中增加如下配置資訊:
server {
listen 80;
server_name 192.168.3.40;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
負載均衡的策略
輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除,
weight
weight 代表權重,默認為 1,權重越高被分配的客戶端越多,
指定輪詢幾率,weight 和訪問率成正比,用于后端服務器性能不均的情況,
upstream myserver {
server 192.168.3.28:1111 weight=10;
server 192.168.3.28:2222 weight=5;
}
ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決 session 的問題,
upstream myserver {
ip_hash;
server 192.168.3.28:1111;
server 192.168.3.28:2222;
}
fair(第三方)
按后端服務器的回應時間來分配請求,回應時間短的優先分配,
upstream myserver {
server 192.168.3.28:1111;
server 192.168.3.28:2222;
fair
}
動靜分離
為了加快網站的決議速度,可以把動態頁面和靜態頁面由不同的服務器來決議,加快決議速度,降低原來單個服務器的壓力,
Nginx 動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離,嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用 Nginx 處理靜態頁面,Tomcat 處理動態頁面,動靜分離從目前實作角度來講大致分為兩種:
一種是純粹把靜態檔案獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;
另外一種方法就是動態跟靜態檔案混合在一起發布,通過 nginx 來分開,
通過 location 指定不同的后綴名實作不同的請求轉發,通過 expires 引數設定,可以使瀏覽器快取過期時間,減少與服務器之前的請求和流量,
具體 Expires 定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可, 所以不會產生額外的流量,此種方法非常適合不經常變動的資源,(如果經常更新的檔案, 不建議使用 Expires 來快取),我這里設定 3d,表示在這 3 天之內訪問這個 URL,發送一個請求,比對服務器該檔案最后更新時間沒有變化,則不會從服務器抓取,回傳狀態碼 304,如果有修改,則直接從服務器重新下載,回傳狀態碼 200,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/451230.html
標籤:Java
上一篇:Java思考——HashSet集合如何保證元素的唯一性也就是不包含重復元素?
下一篇:Profile
