1. 程式人生 > >Linux Centos 安裝Nginx和全面瞭解Nginx都做了些什麼

Linux Centos 安裝Nginx和全面瞭解Nginx都做了些什麼

什麼是Nginx

Nginx 是一款高效能的 http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師伊戈爾·西索夫(Igor Sysoev)所開發,官方測試 nginx 能夠支支撐 5 萬併發連結,並且 cpu、記憶體等資源消耗卻非常低,執行非常穩定。
在這裡插入圖片描述

Nginx能做什麼

1、http 伺服器。Nginx 是一個 http 服務可以獨立提供 http 服務。可以做網頁靜態伺服器。
2、虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用 nginx 做反向代理。並且多臺伺服器可以平均分擔負載,不會因為某臺伺服器負載高宕機而某臺伺服器閒置的情況。

簡單來說就是
  • 反向代理
  • 負載均衡
  • HTTP伺服器(動靜分離)

Nginx安裝

環境準備
  • centos7
  • 核心為 3.10.0-514.el7.x86_64

1、需要安裝 gcc 的環境。

yum install gcc-c++

2、第三方的開發包。

  • 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-devel
    
  • OpenSSL
    OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的金鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程式供測試或其它目的使用。nginx 不僅支援 http 協議,還支援 https(即在 ssl 協議上傳輸 http),所以需要在 linux安裝 openssl 庫。
    yum install -y openssl openssl-devel
    
Nginx安裝

1、官網下載nginxhttp://nginx.org/
我這裡使用的版本為 1.8.0版本。
2、將下載好的 nginx 原始碼包 nginx-1.8.0.tar.gz 上傳到伺服器
3、解壓縮

tar -xvzf nginx-1.8.0.tar.gz

4、進入 nginx-1.8.0目錄,使用configure命令建立一makeFile檔案。

./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

執行後可以看到 Makefile檔案
在這裡插入圖片描述

  • configure引數解釋
./configure \
--prefix=/usr \                        			指向安裝目錄
--sbin-path=/usr/sbin/nginx \                    指向(執行)程式檔案(nginx)
--conf-path=/etc/nginx/nginx.conf \          		指向配置檔案
--error-log-path=/var/log/nginx/error.log \  		指向log
--http-log-path=/var/log/nginx/access.log \      指向http-log
--pid-path=/var/run/nginx/nginx.pid \            指向pid
--lock-path=/var/lock/nginx.lock \              (安裝檔案鎖定,防止安裝檔案被別人利用,或自己誤操作。)
--user=nginx \
--group=nginx \
--with-http_ssl_module \                      	啟用ngx_http_ssl_module支援(使支援https請求,需已安裝openssl)
--with-http_flv_module \                       	啟用ngx_http_flv_module支援(提供尋求記憶體使用基於時間的偏移量檔案)
--with-http_stub_status_module \     				啟用ngx_http_stub_status_module支援(獲取nginx自上次啟動以來的工作狀態)
--with-http_gzip_static_module \   				啟用ngx_http_gzip_static_module支援(線上實時壓縮輸出資料流)
--http-client-body-temp-path=/var/tmp/nginx/client/ 設定http客戶端請求臨時檔案路徑
--http-proxy-temp-path=/var/tmp/nginx/proxy/  	設定http代理臨時檔案路徑
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 	設定http fastcgi臨時檔案路徑
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 	設定http uwsgi臨時檔案路徑
--http-scgi-temp-path=/var/tmp/nginx/scgi \ 		設定http scgi臨時檔案路徑
--with-pcre 										啟用pcre庫

5、編譯

make

6、安裝

 make install 
Nginx啟動與訪問

1、啟動nginx 之前,上邊將臨時檔案目錄指定為/var/temp/nginx/client, 需要在/var下建立此目錄

mkdir /var/temp/nginx/client -p

2、進到 nginx 目錄下的sbin目錄

./nginx

3、啟動後檢視程序

netstat -nlpt

在這裡插入圖片描述
瀏覽器上輸入伺服器IP即可訪問(預設為80埠)
在這裡插入圖片描述
注意:如果啟動成功不能訪問很有可能是因為防火牆的原因如果是開啟了防火牆執行命令iptables -F,其它問題請具體檢視日誌,日誌目錄在 /var/log/nginx
4、記幾個nginx命令

關閉 nginx
./nginx -s stop
./nginx -s quit

修改配置檔案後直接重啟
./nginx -s reload

Nginx 靜態網站部署

1、準備好一份靜態網頁上傳伺服器的/usr/local/nginx/下即可。
在這裡插入圖片描述
2、修改Nginx的配置檔案/usr/local/nginx/conf/nginx.conf

server {
   listen       80;
    server_name  localhost;
    location / {
        root   blog; 修改為剛剛上傳的blog目錄
        index  index.html index.htm;
    }
}

注意記得重新reload一下./nginx -s reload
3、直接輸入IP可以看到剛剛頁面
在這裡插入圖片描述

Nginx 反向代理

反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

簡單來說就是真實的伺服器不能直接被外部網路訪問,所以需要一臺代理伺服器,而代理伺服器能被外部網路訪問的同時又跟真實伺服器在同一個網路環境,當然也可能是同一臺伺服器,埠不同而已。

反向代理簡單架構圖
在這裡插入圖片描述
可以看到圖中,intenet通過請求到 nginx 伺服器 nginx通過反向轉給內部的伺服器。

配置反向代理

1、將tomcat專案上傳會到伺服器。
2、啟動tomcat,輸入http://192.168.60.128:8080可以看到網站
在這裡插入圖片描述
3、修改 Nginx 配置檔案

server {
	listen       8080;
	server_name  www.kyrieandrewirving.cn;
	location / {
		反向代理
		proxy_pass http://127.0.0.1:8080/;
		index  index.html index.htm;
	}
}

由於我的域名沒有備案不能監聽80埠只能修改為8080埠
4、重啟 Nginx,直接用域名訪問http://www.kyrieandrewirving.cn:8080;
在這裡插入圖片描述

配置負載均衡

負載均衡也是Nginx常用的一個功能,負載均衡其意思就是分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。簡單而言就是當有2臺或以上伺服器時,根據規則隨機的將請求分發到指定的伺服器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。
1、準備好三份tomcat專案,埠分別為 808081808280,分別啟動起來
在這裡插入圖片描述
可以看到3個項都啟動啟動起來了,也能成功訪問,對每個專案的標題進行了區分。分別是No.1、No.2、No.3。
2、修改 Nginx配置檔案

    upstream tomcat-portal {
	server 192.168.19.128:8080;
	server 192.168.19.128:8180;
	server 192.168.19.128:8280;
    }
    server {
        listen       80;
        server_name kyrieivring.com;
        location / {
	    proxy_pass http://tomcat-portal;
            index  index.html index.htm;
        }
    }

位址列輸入 http://kyrieivring.com重新整理觀察每個網頁的標題是否有變數,經過測試得出結論,三臺伺服器出現的概率為33.3333333%,交替顯示。
在這裡插入圖片描述
如果有其中一臺伺服器效能比較好,想讓其承擔更多的壓力,可以設定權重。
如果讓 No.1出現次數是其它伺服器的2倍,修改配置如下

    upstream tomcat-portal {
	server 192.168.19.128:8080;
	server 192.168.19.128:8180 weight=2;
	server 192.168.19.128:8280;
    }

經過測試,每重新整理四次,有兩次是No.1也就是8180埠。
在這裡插入圖片描述

Nginx 動靜分離

動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特點將其做快取操作,這就是網站靜態化處理的核心思路。
配置檔案如下

upstream tomcat{  
	server 192.168.19.128:8080;  
	server 192.168.19.128:8180;  
}   
server {  
	listen       80;  
	server_name  kyrieivring.com;  

	location / {  
		root   html;  
		index  index.html;  
	}  

	# 所有靜態請求都由nginx處理,存放目錄為html  
	location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
  		root    /usr/local/www/html/static;  
	}  

	# 所有動態請求都轉發給tomcat處理  
	location ~ \.(jsp|do)$ {  
		proxy_pass  http://tomcat;  
	}  
 } 

這樣我們就可以把HTML以及圖片和css以及js放到/usr/local/www/html/static目錄下,而tomcat只負責處理jsp和請求,例如當我們字尾為gif的時候,Nginx預設會從/usr/local/www/html/static獲取到當前請求的動態圖檔案返回,當然這裡的靜態檔案跟Nginx是同一臺伺服器,我們也可以在另外一臺伺服器,然後通過反向代理和負載均衡配置過去就好了,只要搞清楚了最基本的流程,很多配置就很簡單了,另外localtion後面其實是一個正則表示式,所以非常靈活。

最後感謝閱讀,講得不好的地方,有問題等歡迎留言,看到第一時間修改和答覆。