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 庫。
備註:pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx 也需要此庫。yum install -y pcre pcre-devel
- 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、官網下載nginx
:http://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專案,埠分別為 8080
、8180
、8280
,分別啟動起來
可以看到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後面其實是一個正則表示式,所以非常靈活。