什么是 nginx
- Nginx是一個高性能的 HTTP 和反向代理服務器。特點:占有內存小,并發能力強,事實上nginx 的并發能力確實是同類網頁服務器中表現較好。
- Nginx是專門為性能優化而開發,性能是最重要的考量,實現上非常注重效率,能經受高負載的考驗,有報告表明支持高達 50000 個并發連接數。
nginx 安裝
1.將 Nginx 安裝包上傳到 Linux 中
官網:http:///en/download.html 這里安裝使用的 Nginx 版本為 nginx-1.8.0.tar.gz
2 nginx 安裝環境
nginx 是 C 語言開發,建議在 linux 上運行
-
gcc
安裝 nginx 需要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc環境,需要安裝 gcc:yum install gcc-c++
-
PCRE
PCRE(Perl Compatible Regular Expressions)是一個 Perl 庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫。
yum install -y pcre pcre-devel
注:pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx 也需要此庫。
-
zlib
zlib 庫提供了很多種壓縮和解壓縮的方式,nginx 使用 zlib 對 http 包的內容進行 gzip, 所以需要在 linux 上安裝 zlib 庫。
yum install -y zlib zlib-developenssl
-
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議,并提供豐富的應用程序供測試或其它目的使用。nginx 不僅支持 http 協議,還支持 https(即在 ssl 協議上傳輸 http),所以需要在linux 安裝 openssl 庫。
yum install -y openssl openssl-devel
3.編譯安裝
解壓:tar -zxvf nginx-1.8.0.tar.gz
進入到 nginx 的根目錄 cd nginx-1.8.0
-
3.1配置安裝參數 ./configure
參數設置如下:
./configure
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上邊將臨時文件目錄指定為/var/temp/nginx,需要在/var 下創建 temp 及 nginx 目錄
--prefix=/usr/local/nginx決定將 nginx 安裝到什么位置,設置了就會自動創建
-
3.2編譯安裝 編譯:make
編譯安裝 make install,安裝完成之后在/usr/local/nginx/sbin 下有 sbin 的啟動腳本
4.操作Nginx
- 使用 nginx 操作的常用命令:必須要進入 nginx 目錄中去才行 /usr/local/nginx/sbin
- 查看 nginx 版本號 查看版本號 ./nginx -v
- 查看 nginx 啟動狀態 ps aux|grep nginx
- 啟動 nginx
cd /usr/local/nginx/sbin/
./nginx
注意:執行./nginx 啟動 nginx,這里可以-c 指定加載的 nginx 配置文件,如下: ./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx 在啟動時默認加載 conf/nginx.conf 文件,此文件的地址也可以在 編譯安裝 nginx 時指定./configure 的參數(--conf-path= 指向配置文件(nginx.conf))
- 停止 nginx
方式 1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相當于先查出 nginx 進程 id 再使用 kill 命令強制殺掉進程。
方式 2,完整停止(建議使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步驟是待 nginx 進程處理任務完畢進行停止。
- 重啟 nginx
方式 1,先停止再啟動(建議使用):
對 nginx 進行重啟相當于先停止 nginx 再啟動 nginx,即先執行停止命令再執行啟動命令。 如下:
./nginx -s quit
./nginx
方式 2,重新加載配置文件:
當 nginx 的配置文件 nginx.conf 修改后,要想讓配置生效需要重啟 nginx,使用-s reload
不用先停止 nginx 再啟動 nginx 即可將配置信息在 nginx 中生效,如下:
./nginx -s reload
- 測試
nginx 安裝成功,啟動 nginx,即可訪問虛擬機上的 nginx Nginx 默認的是監聽80 端口
正向代理
- 在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行訪問,服務端訪問的是真實的服務器

反向代理
- 我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器的 ip 地址。服務端訪問的是代理的服務器

負載均衡
- 并發請求較大,使用單一服務器容易造成崩潰。單個服務器解決不了,我們增加服務器的數量,然后將請求額分發到各個服務器上,將原先請求集中到單個服務器上的情況改為分發到多個服務器上,將負載分發到不同的服務器,這就是所說的負載均衡。

動靜分離
- 為了加快網站的解析速度,可以吧動態頁面和靜態頁面由不同服務器來解析,加快解析速度,降低單個服務器的壓力。這里會使用 Nginx 處理靜態頁面物理分離,Tomcat 處理動態頁面。提供訪問效率

nginx 使用
搭建虛擬主機
虛擬主機是一種特殊的軟硬件技術,它可以將網絡上的每一臺計算機分成多個虛擬主 機,每個虛擬主機可以獨立對外提供 www 服務,這樣就可以實現一臺主機對外提供多個 web 服務,每個虛擬主機之間是獨立的,互不影響的。
虛擬主機技術是互聯網服務器采用的節省服務器硬件成本的技術,虛擬主機技術主要應 用于 HTTP(Hypertext Transfer Protocol,超文本傳輸協議)服務,將一臺服務器的某項或 者全部服務內容邏輯劃分為多個服務單位,對外表現為多個服務器,從而充分利用服務器硬 件資源。主要就是節省硬件成本
Nginx 的虛擬主機配置方式
Nginx 支持三種類型的虛擬主機配置
-
基于 IP 的虛擬主機
這里使用一臺 liunx 搭建 2 個 ip,不同 ip 訪問不同的 html 頁面(這里就是 nginx 的訪問首頁)
- 第一步,一臺 linux 配置多 ip 方式,將動態 ip 改成靜態 ip 進入 cd /etc/sysconfig/network-scripts ,進入配置 ,需將配置文件中BOOTPRPTP=static,其次添加另一個 ip 配置內容:保存重啟服務即可配置成功。

IPADDR=192.168.10.144
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=114.114.114.114
-
第二步修改 nginx 的配置文件,我這里是在/usr/local/nginx/conf 目錄下
Nginx 的配置文件 nginx.conf
如上述配置文件所示,主要由 6 個部分組成:
main:用于進行 nginx 全局信息的配置
events:用于 nginx 工作模式的配置
http:用于進行 http 協議信息的一些配置
server:用于進行服務器訪問信息的配置 ,一個 server 就是一個虛擬機
location:用于進行訪問路由的配置
upstream:用于進行負載均衡的配置
主要是對 http 下 server 和 location 進行修改配置即可
#一個 Server 就是一個虛擬主機
server {
listen 80;
#為虛擬機指定 IP 或者是域名
server_name 192.168.70.144;
#主要配置路由訪問信息
location / {
#用于指定訪問根目錄時,訪問虛擬主機的 web 目錄 就是這個主頁的目錄
root html144;
#在不指定訪問具體資源時,默認的展示資源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; }
}
-
基于端口的虛擬主機
-
基于端口和 ip 配置都差不多這里主要修改 listen 即可
#一個 Server 就是一個虛擬主機 基于端口
server {
listen 8080;
#為虛擬機指定 IP 或者是域名
server_name 192.168.70.188;
#主要配置路由訪問信息
location / {
#用于指定訪問根目錄時,訪問虛擬主機的 web 目錄
root html8080;
#在不指定訪問具體資源時,默認的展示資源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; location = /50x.html {
root html; }
}
-
基于域名的虛擬主機(以 mac 配置)
-
修改hosts 下面的映射關系 命令:sudo vi /etc/hosts,進入之后進行映射
192.168.70.188 www.123.com
-
修改 Nginx 的配置文件完成基于域名的虛擬主機配置
server {
listen 80;
#為虛擬機指定 IP 或者是域名,這里使用域名
server_name www.123.com;
#主要配置路由訪問信息
location / {
#用于指定訪問根目錄時,訪問虛擬主機的 web 目錄
root html-123;
#在不指定訪問具體資源時,默認的展示資源的列表
index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html {
root html; }
}
這三種配置方式其實都比較類似主要是修改 配置文件中的 listen,server_name,以及 location 既可以完成
反向代理
這里需要先對 虛擬機ip(nginx 默認端口就是80可省略) 和域名做一個映射,前面已經使用過不在贅述,其次就是修改 nginx.conf配置文件,完成配置

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## 增加這個屬性完成虛擬機代理,表示代理那個服務器
upstream tomcat_server1{
server 192.168.70.143:8080;
}
server {
listen 80;
#為虛擬機指定 IP 或者是域名
server_name com.123.com;
#主要配置路由訪問信息 location / {
#用于指定訪問根目錄時,訪問虛擬主機的 web 目錄 這里刪除 root,root 是去找虛擬機中的目錄
proxy_pass http://tomcat_server1;
#在不指定訪問具體資源時,默認的展示資源的列表
通過以上配置,重啟 nginx 既可以完成代理,通過訪問 www.123.com,就可以訪問 tomcat 首頁

負載均衡
什么是負載均衡
- 負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展 網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如 Web 服務器、FTP 服務器、企業關鍵應用服務器和其它關鍵任務 服務器等,從而共同完成工作任務。
負載均衡的策略
-
輪詢(默認) 每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除。
-
指定權重
指定輪詢幾率,weight 和訪問比率成正比,用于后端服務器性能不均的情況。性能高的多處理
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
-
IP 綁定 ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪 問一個后端服務器,可以解決 session 的問題。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
這里通過同一個 liunx 上使用兩個 tomcat 模擬
如何在一個虛擬機配置多個 tomcat?
這里和使用一個 tomcat 的時候是一致的,只需要修改配置文件中的標簽即可,進入 tomcat 目錄修改

如下標簽,主要是為了區分端口號:只要不要和第一個 tomcat 相同即可,默認端口是 8080



配置 nginx 的集群 還是在 nginx.conf 中進行配置,直接在之前反向代理的配置中進行增加即可,即可配置成集群
## 增加這個屬性完成虛擬機代理
upstream tomcat_server1{
server 192.168.70.143:8080; ## 直接在后面加權重即可
server 192.168.70.143:9090;
}
節點說明:
在 http 節點里添加:
定義負載均衡設備的 Ip 及設備狀態
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用負載的 Server 節點下添加 proxy_pass http://myServer;
upstream 每個設備的狀態:
down 表示單前的 server 暫時不參與負載
weight 默認為 1.weight 越大,負載的權重就越大
fail_timeout:次失敗后,暫停的時間 默認 10s
max_fails :允許請求失敗的次數默認為 1.當超過最大次數時,返回
backup: 其它所有的非 backup 機器 down 或者忙的時候,請求 backup 機器。所以這臺機器壓力會最輕。
|