nginx總結(jié)

Nginx快速入門

Nginx作用

  • 動(dòng)靜分離
  • 反向代理
  • 負(fù)載均衡
  • ...

概念理解

正向代理

正向代理,意思是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端。

正向代理是為我們服務(wù)的,即為客戶端服務(wù)的,客戶端可以根據(jù)正向代理訪問到它本身無法訪問到的服務(wù)器資源。正向代理對我們是透明的,對服務(wù)端是非透明的,即服務(wù)端并不知道自己收到的是來自代理的訪問還是來自真實(shí)客戶端的訪問。不理解是吧,上圖!

反向代理

反向代理*(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)反向代理服務(wù)器。

反向代理是為服務(wù)端服務(wù)的,反向代理可以幫助服務(wù)器接收來自客戶端的請求,幫助服務(wù)器做請求轉(zhuǎn)發(fā),負(fù)載均衡等。

反向代理對服務(wù)端是透明的,對我們是非透明的,即我們并不知道自己訪問的是代理服務(wù)器,而服務(wù)器知道反向代理在為他服務(wù)。

反向代理的優(yōu)勢:

  • 隱藏真實(shí)服務(wù)器
  • 負(fù)載均衡便于橫向擴(kuò)充后端動(dòng)態(tài)服務(wù)
  • 動(dòng)靜分離,提升系統(tǒng)健壯性

動(dòng)靜分離

動(dòng)動(dòng)靜分離,在我們的軟件開發(fā)中,有些請求是需要后臺處理的,有些請求是不需要經(jīng)過后臺處理的(如:css、html、jpg、js等等文件),這些不需要經(jīng)過后臺處理的文件稱為靜態(tài)文件。讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動(dòng)靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作。提高資源響應(yīng)的速度。

一般來說,都需要將動(dòng)態(tài)資源和靜態(tài)資源分開,由于 Nginx 的高并發(fā)和靜態(tài)資源緩存等特性,經(jīng)常將靜態(tài)資源部署在 Nginx 上。如果請求的是靜態(tài)資源,直接到靜態(tài)資源目錄獲取資源,如果是動(dòng)態(tài)資源的請求,則利用反向代理的原理,把請求轉(zhuǎn)發(fā)給對應(yīng)后臺應(yīng)用去處理,從而實(shí)現(xiàn)動(dòng)靜分離。

使用前后端分離后,可以很大程度提升靜態(tài)資源的訪問速度,即使動(dòng)態(tài)服務(wù)不可用,靜態(tài)資源的訪問也不會受到影響。

負(fù)載均衡

一般情況下,客戶端發(fā)送多個(gè)請求到服務(wù)器,服務(wù)器處理請求,其中一部分可能要操作一些資源比如數(shù)據(jù)庫、靜態(tài)資源等,服務(wù)器處理完畢后,再將結(jié)果返回給客戶端。

這種模式對于早期的系統(tǒng)來說,功能要求不復(fù)雜,且并發(fā)請求相對較少的情況下還能勝任,成本也低。隨著信息數(shù)量不斷增長,訪問量和數(shù)據(jù)量飛速增長,以及系統(tǒng)業(yè)務(wù)復(fù)雜度持續(xù)增加,這種做法已無法滿足要求,并發(fā)量特別大時(shí),服務(wù)器容易崩。

很明顯這是由于服務(wù)器性能的瓶頸造成的問題,除了堆機(jī)器之外,最重要的做法就是負(fù)載均衡。

請求爆發(fā)式增長的情況下,單個(gè)機(jī)器性能再強(qiáng)勁也無法滿足要求了,這個(gè)時(shí)候集群的概念產(chǎn)生了,單個(gè)服務(wù)器解決不了的問題,可以使用多個(gè)服務(wù)器,然后將請求分發(fā)到各個(gè)服務(wù)器上,將負(fù)載分發(fā)到不同的服務(wù)器,這就是負(fù)載均衡,核心是「分?jǐn)倝毫Α埂?Nginx 實(shí)現(xiàn)負(fù)載均衡,一般來說指的是將請求轉(zhuǎn)發(fā)給服務(wù)器集群。

Nginx 實(shí)現(xiàn)負(fù)載均衡的策略:

  • 輪詢策略:默認(rèn)情況下采用的策略,將所有客戶端請求輪詢分配給服務(wù)端。這種策略是可以正常工作的,但是如果其中某一臺服務(wù)器壓力太大,出現(xiàn)延遲,會影響所有分配在這臺服務(wù)器下的用戶。
  • 最小連接數(shù)策略:將請求優(yōu)先分配給壓力較小的服務(wù)器,它可以平衡每個(gè)隊(duì)列的長度,并避免向壓力大的服務(wù)器添加更多的請求。
  • 最快響應(yīng)時(shí)間策略:優(yōu)先分配給響應(yīng)時(shí)間最短的服務(wù)器。
  • 客戶端 ip 綁定策略:來自同一個(gè) ip 的請求永遠(yuǎn)只分配一臺服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁存在的 session 共享問題。

如何安裝

1、安裝gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:

yum install gcc-c++

2、PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個(gè)Perl庫,包括 perl 兼容的正則表達(dá)式庫。nginx 的 http 模塊使用 pcre 來解析正則表達(dá)式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發(fā)的一個(gè)二次開發(fā)庫。nginx也需要此庫。命令:

yum install -y pcre pcre-devel

3、zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內(nèi)容進(jìn)行 gzip ,所以需要在 Centos 上安裝 zlib 庫。

yum install -y zlib zlib-devel

4、OpenSSL 安裝
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序供測試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。

yum install -y openssl openssl-devel

5、下載安裝包
手動(dòng)下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
下載完上傳到/root里。

6、解壓

tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

7、配置
使用默認(rèn)配置,在nginx根目錄下執(zhí)行

./configure
make
make install

查找安裝路徑: whereis nginx

Nginx常用命令

systemctl 系統(tǒng)命令:

# 開機(jī)配置
systemctl enable nginx # 開機(jī)自動(dòng)啟動(dòng)
systemctl disable nginx # 關(guān)閉開機(jī)自動(dòng)啟動(dòng)

# 啟動(dòng)Nginx
systemctl start nginx # 啟動(dòng)Nginx成功后,可以直接訪問主機(jī)IP,此時(shí)會展示Nginx默認(rèn)頁面

# 停止Nginx
systemctl stop nginx

# 重啟Nginx
systemctl restart nginx

# 重新加載Nginx
systemctl reload nginx

# 查看 Nginx 運(yùn)行狀態(tài)
systemctl status nginx

# 查看Nginx進(jìn)程
ps -ef | grep nginx

# 殺死Nginx進(jìn)程
kill -9 pid # 根據(jù)上面查看到的Nginx進(jìn)程號,殺死Nginx進(jìn)程,-9 表示強(qiáng)制結(jié)束進(jìn)程

Nginx 應(yīng)用程序命令:

nginx -s reload  # 向主進(jìn)程發(fā)送信號,重新加載配置文件,熱重啟
nginx -s reopen  # 重啟 Nginx
nginx -s stop    # 快速關(guān)閉
nginx -s quit    # 等待工作進(jìn)程處理完成后關(guān)閉
nginx -T         # 查看當(dāng)前 Nginx 最終的配置
nginx -t         # 檢查配置是否有問題

注意:如何連接不上,檢查阿里云安全組是否開放端口,或者服務(wù)器防火墻是否開放端口!
相關(guān)命令:

# 開啟
service firewalld start
# 重啟
service firewalld restart
# 關(guān)閉
service firewalld stop
# 查看防火墻規(guī)則
firewall-cmd --list-all
# 查詢端口是否開放
firewall-cmd --query-port=8080/tcp
# 開放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重啟防火墻(修改配置后要重啟防火墻)
firewall-cmd --reload
# 參數(shù)解釋
1、firwall-cmd:是Linux提供的操作firewall的一個(gè)工具;
2、--permanent:表示設(shè)置為持久;
3、--add-port:標(biāo)識添加的端口;

Nginx 配置

# user 指定運(yùn)行 nginx 的用戶和組(第一個(gè)參數(shù)為用戶第二個(gè)為組,這里只有用戶)
#user  nobody;
# 指定工作進(jìn)程數(shù)(一般設(shè)置為CPU核數(shù))
worker_processes  1;   

# 指定錯(cuò)誤日志為 logs/ 目錄下的 error.log 文件
#error_log  logs/error.log;
# 指定錯(cuò)誤日志,并指定寫入格式為 notice
#error_log  logs/error.log  notice;
# 指定錯(cuò)誤日志,并指定寫入格式為 info  
#error_log  logs/error.log  info;

# 指定 pid 文件(存放主進(jìn)程 pid 號)
#pid        logs/nginx.pid;

# nginx 連接配置模塊
events {
    # 指定每個(gè)工作進(jìn)程最大連接數(shù)為 1024
    worker_connections  1024;
}

# http 配置模塊
http {
    # 通過 include 加載 mime.types 文件,里面的 types {} 模塊將文件擴(kuò)展名映射到響應(yīng)的 MIME 類型
    include       mime.types;
    # 定義響應(yīng)的默認(rèn) MIME 類型
    default_type  application/octet-stream;

    # 寫入格式 main 的內(nèi)容格式如下
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 指定訪問日志和寫入格式為 main
    #access_log  logs/access.log  main;

    # 啟用或者禁用 sendfile()
    sendfile        on;
    # 啟用或者禁用使用套接字選項(xiàng)(僅在 sendfile 使用時(shí)使用)
    #tcp_nopush     on;

    # 0 值禁用保持活動(dòng)的客戶端連接
    #keepalive_timeout  0;
    # 65 s 超時(shí)
    keepalive_timeout  65;

    # 啟用或者禁用 gzip
    #gzip  on;

    # 虛擬主機(jī)配置模塊
    server {
        # 監(jiān)聽 80 端口
        listen       80;
        # 監(jiān)聽域名為 localhost
        server_name  localhost;
        # 將指定的 charset 添加到 “Content-Type” 響應(yīng)頭字段。如果此charset與source_charset指令中指定的charset不同,則執(zhí)行轉(zhuǎn)換。
        #charset koi8-r;

        # 指定該虛擬主機(jī)的訪問日志
        #access_log  logs/host.access.log  main;

        # 將特定的文件或目錄重新定位,如 php 文件,image 目錄等
        location / {
            # 設(shè)置請求的根目錄
            root   html;
            # 定義索引,按順序匹配
            index  index.html index.htm;
        }

        # 定義顯示 404 錯(cuò)誤的 uri
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        # location 精準(zhǔn)匹配 '/50x.html'
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        # 正則表達(dá)式匹配 php 文件
        #location ~ \.php$ {
            # 設(shè)置代理服務(wù)器的協(xié)議和地址,以及應(yīng)該映射位置的可選URI。作為協(xié)議,可以指定“http”或“https”。該地址可以指定為一個(gè)域名或IP地址,以及一個(gè)可選端口
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
             # 設(shè)置 FastCGI 服務(wù)器的地址。地址可以指定為一個(gè)域名或 IP 地址,以及一個(gè)端口
        #    fastcgi_pass   127.0.0.1:9000;
             # 設(shè)置將在以斜杠結(jié)尾的URI之后追加的文件名,
        #    fastcgi_index  index.php;
             # 設(shè)置一個(gè)應(yīng)該傳遞給FastCGI服務(wù)器的參數(shù)。
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
             # 加載 conf/fastcgi_params 文件
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    # ssl 配置,要啟用 ssl 模塊需要在編譯 nginx 時(shí)加上 --with-http_ssl_module 參數(shù)
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Nginx 安裝 Nginx 是一款面向性能設(shè)計(jì)的 HTTP 服務(wù)器,能反向代理 HTTP,HTTPS 和郵件相關(guān)...
    愛撒謊的男孩閱讀 561評論 0 1
  • nginx Fundamentals: High Performance Servers nginx 是什么就不必...
    英武閱讀 1,739評論 0 52
  • Nginx (engine x) 是一個(gè)高性能的 HTTP 和 反向代理 服務(wù),也是一個(gè)IMAP/POP3/SMT...
    夜醉夢紅塵閱讀 293評論 0 5
  • Nginx安裝和配置 正向代理比如你現(xiàn)在缺錢,想找馬云爸爸去借錢,,到最后碰一鼻子灰借不到錢。不過你認(rèn)識你家隔壁老...
    北沐城歌__閱讀 583評論 0 2
  • 一:nginx 特點(diǎn)a. 小巧(文件不大)b. 反應(yīng)快速 (在網(wǎng)絡(luò)通訊方面,性能高效. 因?yàn)椴捎玫母咝У脑O(shè)計(jì)IO多...
    春華秋實(shí)張哲閱讀 338評論 0 0

友情鏈接更多精彩內(nèi)容