Nginx是一個高性能的http和反向代理伺服器,其特點是佔用內存小,並發能力強。Nginx專為性能優化而開發,性能是其最重要的考量,能經受高負載的考驗,有報告表明能支持高達50000個並發連接數。
1.2 反向代理正向代理:在瀏覽器中配置代理伺服器,通過代理伺服器進行網際網路訪問。
反向代理:將請求發送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取數據後,再返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴漏的是代理伺服器地址。
1.3 負載均衡如果請求數過大,單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器的情況改為請求分發到多個伺服器上,就是負載均衡。
1.4 動靜分離為了加快伺服器的解析速度,可以把動態頁面和靜態頁面交給不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。
二 Nginx的安裝Nginx需要幾個依賴包,分別是pcre,openssl,zlib,在安裝nginx之前需要先安裝這幾個依賴。
2.1 安裝pcre依賴使用命令下載pcre壓縮包
1wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解壓壓縮文件
1tar -xvf pcre-8.37.tar.gz
進入解壓後的名錄,執行以下命令
1./configure
使用以下命令進行編譯安裝
1make && make install
查看安裝的pcre版本號
1pcre-config --version
1yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
nginx官網下載nginx,官網地址:https://nginx.org/download/;
將壓縮包拖到伺服器上;
使用命令tar -xvf nginx-1.12.2.tar.gz解壓壓縮包;
使用命令./configure檢查;
使用命令make && make isntall編譯安裝;
安裝成功後,在usr會多出來一個文件夾,local/nginx,在nginx的sbin文件夾下有啟動腳本。
2.4 啟動nginx在/usr/local/nginx/sbin文件夾下,使用以下命令啟動
1./nginx
然後瀏覽器訪問伺服器ip,nginx默認埠是80,出現以下頁面則證明nginx安裝成功;
2.5 Nginx常用的命令使用這些命令時需要進入/usr/local/nginx/sbin文件夾
1./nginx -v
1./nginx
1./nginx -s stop
1./nginx -s reload
nginx的配置文件在/usr/local/nginx/conf中的nginx.conf。我們將nginx.conf中注釋的內容刪除一下。
1#user nobody;
2worker_processes 1;
3
4#pid logs/nginx.pid;
5
6events {
7 worker_connections 1024;
8}
9
10http {
11 include mime.types;
12 default_type application/octet-stream;
13
14 sendfile on;
15 #tcp_nopush on;
16
17 #keepalive_timeout 0;
18 keepalive_timeout 65;
19
20 #gzip on;
21
22 server {
23 listen 80;
24 server_name localhost;
25
26 location / {
27 root html;
28 index index.html index.htm;
29 }
30 }
31}
nginx的配置文件包含三部門。
1.全局塊
從配置文件開始到events塊之間的內容,主要會設置一些nginx伺服器整體運行的配置指令。
1worker_processes 1;
這個代表nginx處理並發的關鍵配置,值越大,處理並發能力越強。但是會受到硬體、軟體等約束。
2.events塊
events塊涉及的指令主要影響nginx伺服器與用戶網絡的連接。
1worker_connections 1024;
這個代表nginx支持的最大連接數。
3.http全局塊
nginx伺服器配置最頻繁的部分。http全局塊包含http塊和server塊。
三 Nginx配置反向代理3.1 ngix代理流程本地瀏覽器訪問nginx伺服器,nginx伺服器反向代理tomcat伺服器,當我們請求nginx的時候直接訪問到tomcat。tomcat的安裝這裡就不在講了,我將tomcat和nginx安裝在了同一臺伺服器上。
由於我們的nginx沒有域名,為了演示,因此我們在本地host文件中配置nginx伺服器ip和域名進行綁定。這個host文件的具體位置在C:\Windows\System32\drivers\etc。在host文件中增加一句配置:
147.104.xxx.xxx www.javatrip.com
前面的ip是伺服器的ip地址,後面的域名是我隨便起的用於綁定這個ip的一個域名。配置好之後,我們使用域名訪問一下tomcat,如果能請求到tomcat默認頁面,則配置成功。
3.3 在nginx配置請求轉發1 server {
2 listen 80;
3 server_name localhost;
4
5 location / {
6 root html;
7 index index.html index.htm;
8 }
9 }
我們將以上默認的配置文件做個修改:
1server {
2 listen 80;
3 server_name 47.104.xxx.xxx;
4
5 location / {
6 root html;
7 proxy_pass http://127.0.0.1:8080;
8 index index.html index.htm;
9 }
10}
以上這段配置的意思就是請求是47.104.xxx.xxx:80,都會轉發至47.104.xxx.xxx:8080。
現在瀏覽器訪問www.javatrip.com,發現直接轉發到了tomcat上了,這樣簡單的反向代理就完成了。
3.4 根據請求後綴分發我們再解壓一個tomcat,埠號設置為8081,分別在兩個tomcat下webapps目錄下面新建dev和prod目錄,然後在該目錄下寫一個文件。
將請求www.javatrip.com:7001/dev轉發到tomcat8080,將請求www.javatrip.com:7001/prod轉發到tomcat8081。現在我們的nginx監聽的埠號是7001。打開nginx的配置文件,新建一個server如下:
1server {
2 listen 7001;
3 server_name 47.104.xxx.xxx;
4
5 location ~ /dev/ {
6 proxy_pass http://127.0.0.1:8080;
7 }
8
9 location ~ /prod/ {
10 proxy_pass http://127.0.0.1:8081;
11 }
12}
然後試試效果,分別訪問www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果如下:
其中,配置轉發的時候用到了~,其含義內容如下:
四 Nginx配置負載均衡4.1 什麼是負載均衡負載均衡(Load Balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,組件)上進行執行。是解決高性能,單點故障(高可用),擴展性(水平伸縮)的終極解決方案。
現在我們想實現的效果是通過訪問www.javatrip.com:7001/prod/a.html,將請求分別分發到兩個tomcat上面去,首先我們在tomcat8080上新建一個prod的文件夾,裡面放一個a.html的文件。這樣tomcat8081和tomcat8080兩個上就都有了一個prod的文件加且裡面有一個a.html的文件。
4.2 配置nginx.conf首先,在http塊中配置兩個tomcat的服務列表
1upstream myserver{
2 server 127.0.0.1:8080;
3 server 127.0.0.1:8081;
4}
其次,在server塊中配置規則:
1server {
2 listen 80;
3 server_name 47.104.xxx.xxx;
4
5 location / {
6 root html;
7 proxy_pass http://myserver;
8 index index.html index.htm;
9 }
10}
訪問地址:www.javatrip.com:7001/prod/a.html,多刷新幾次。發現有的請求到tomcat8080上,有的請求到tomcat8081上。
4.4 nginx支持的幾種負載策略1upstream myserver{
2 server 127.0.0.1:8080;
3 server 127.0.0.1:8081;
4}
1upstream myserver{
2 server 127.0.0.1:8080 weight=1;
3 server 127.0.0.1:8081 weight=2;
4}
1upstream myserver{
2 ip_hash;
3 server 127.0.0.1:8080;
4 server 127.0.0.1:8081;
5}
1upstream myserver{
2 server 127.0.0.1:8080;
3 server 127.0.0.1:8081;
4 fair;
5}
由於動靜分離在實際開發中也不常用,就不再寫了。本篇文章做為一個nginx入門,到這裡就基本完結了。最後留給大家一個問題思考一下:如何保證nginx的高可用?
最近整理一份面試資料《Java技術棧學習手冊》,覆蓋了Java技術、面試題精選、Spring全家桶、Nginx、SSM、微服務、資料庫、數據結構、架構等等。獲取方式:點「 在看,關注公眾號 Java後端 並回復 777 領取,更多內容陸續奉上。
喜歡文章,點個在看