日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx-从零开始使用nginx实现反向代理及负载均衡

發布時間:2025/3/21 Nginx 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx-从零开始使用nginx实现反向代理及负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 環境說明
  • 安裝Nginx
    • 安裝必須的依賴庫 3個
      • 源碼安裝
      • yum安裝
    • 安裝nginx
    • 啟動Nginx
    • 常用操作命令
    • 使用非root用戶啟動nginx
  • 搭建應用
  • Nginx 做反向代理 + 負載均衡
  • upstream中使用的負載均衡算法
    • weight(權重)
    • ip_hash(訪問ip)
    • fair(需要下載upstream_fair模塊)
    • url_hash(需要使用Nginx的hash軟件包)
  • upstream模塊中可設置的狀態值
  • 驗證反向代理和負載均衡
  • 使用keepalived實現Nginx的高可用
    • 安裝keepalived
    • TODO

環境說明

  • OS: Centos6
  • Nginx:nginx-1.14.2

安裝Nginx

安裝必須的依賴庫 3個

  • gzip 模塊需要 zlib 庫 http://www.zlib.net/ (上不去了。。。可以從別的地方下載 ,比如 https://fossies.org/linux/misc/zlib-1.2.11.tar.gz/ )
  • rewrite 模塊需要 pcre http://www.pcre.org/
  • ssl 功能需要 openssl http://www.openssl.org/

  • 先約定統一安裝到/usr/local

    Centos上安裝依賴無非就是兩種形式

    • 源碼安裝
    • rpm包安裝 (可單獨rpm安裝,自行管理依賴,或者使用yum安裝)

    下面分別來說下

    為了方便使用,我上傳到了CSDN上,https://download.csdn.net/download/yangshangwei/11015243 (積分真不是我設置的。。。自動生成的。。。這個有點尷尬)


    源碼安裝

    以下操作均為root用戶

    pcre

    $ cd /usr/local/ $ wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz $ tar -zxvf pcre-8.36.tar.gz $ cd pcre-8.36 $ ./configure $ make $ make install $ make test

    zlib

    $ cd /usr/local/ # 網站無法訪問了,請下載后上傳到/usr/local再解壓 # 可以從 https://fossies.org/linux/misc/zlib-1.2.11.tar.gz/ 下載 $ --wget http://zlib.net/zlib-1.2.11.tar.gz $ tar -zxvf zlib-1.2.11.tar.gz $ cd zlib-1.2.11 $ ./configure $ make $ make install $ make test

    openssl

    $ cd /usr/local/ $ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz $ tar -zxvf openssl-1.0.1j.tar.gz $ cd openssl-1.0.1j $ ./config $ make $ make install $ make test

    yum安裝

    $yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-deve

    同樣是可行的,我用這種方式在 192.168.31.56 安裝的nginx ,OK。


    安裝nginx

    $ cd /usr/local/ $ wget http://nginx.org/download/nginx-1.8.0.tar.gz $ tar -zxvf nginx-1.8.0.tar.gz $ cd nginx-1.8.0 $ ./configure --prefix=/usr/local/nginx $ make $ make install

    啟動Nginx

    驗證下啟動文件是否正常

    [root@artisan sbin]# ./nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

    啟動nginx

    [root@artisan sbin]# /usr/local/nginx/sbin/nginx

    如果啟動的時候碰到了如下錯誤

    ./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

    參考: https://geekflare.com/nginx-error-while-loading-shared-libraries-libpcre-so-1/

    執行: export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

    再次啟動nginx

    [root@artisan sbin]# /usr/local/nginx/sbin/nginx [root@artisan sbin]#

    默認80端口,打開瀏覽器訪問ip地址:


    安裝并啟動成功。


    常用操作命令

    重啟: $ /usr/local/nginx/sbin/nginx -s reload停止: $ /usr/local/nginx/sbin/nginx -s stop測試配置文件是否正常: $ /usr/local/nginx/sbin/nginx -t強制關閉: $ pkill nginx

    使用非root用戶啟動nginx

    比如我新建了個nginx用戶,用戶組也是nginx,后面想用nginx用戶來啟動nginx.

    那么給nginx的安裝目錄使用chown更改下目錄的所有者及用戶組即可。

    [root@artisan sbin]# chown -R nginx:nginx /usr/local/ngin

    需要注意的是,如果使用了nginx普通用戶啟動,那么80端口是啟動不了的,報錯如下,需要將nginx的端口調整為1024以上的端口。

    [nginx@artisan sbin]$ ./nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

    修改 /usr/local/nginx/conf/nginx.conf中的listen對應的端口為8088

    訪問 http://192.168.31.66:8088/


    搭建應用

    Controller寫個方法,供外部訪問用作測試。

    應用程序的啟動,我下面是通過啟動腳本指定端口號來進行啟動的,當然了也可以寫幾個配置文件,在啟動腳本中指定特定的配置文件也行,簡單起見就直接指定端口吧


    Nginx 做反向代理 + 負載均衡

    nginx.conf配置如下,可簡可繁,下面這個是比較簡單的配置

    切了個環境,換了IP地址

    worker_processes 1; #啟動進程,通常設置成和cpu的數量相等#全局錯誤日志及PID文件 error_log /usr/local/nginx/logs/error.log; error_log /usr/local/nginx/logs/error.log notice; error_log /usr/local/nginx/logs/error.log info; pid /usr/local/nginx/logs/nginx.pid;# 工作模式及連接數上線 events {use epoll; #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能worker_connections 1024; #單個后臺worker process進程的最大并發鏈接數 }#設定http服務器,反向代理+負載均衡 http {#添加artisanPool列表 ,對應后臺的serverupstream artisanPool{#server tomcat地址:端口號 weight表示權值,權值越大,被分配的幾率越大; server 10.72.38.235:8080 weight=10 max_fails=3 fail_timeout=30s;server 10.72.38.235:8081 weight=10 max_fails=3 fail_timeout=30s;}#監聽端口和域名server {listen 80; # 如果配置了這個,并且在hosts中配置了ip和域名的對應關系 # 就可以使用http://artisan/serverInfo訪問 (windows的hosts文件配置了 10.72.38.235 artisan)# 可不配server_name artisan; #默認請求設置location / {proxy_pass http://artisanPool; #轉向artisanPool處理}} }

    nginx配置tomcat8及以上的版本時反向代理upstream的名字 不能包含_ ,比如artisan_Pool 就會拋出如上異常


    upstream中使用的負載均衡算法

    upstream按照默認輪訓(round-robin)方式進行負載,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
    雖然這種方式簡便,但缺點也很明顯:可靠性低和負載分配不均衡,比較適合適用于圖片服務器集群和純靜態頁面服務器集群。

    除此之外,upstream支持的分配策略

    weight(權重)

    指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。如下所示,8081節點的訪問比率要比8080節點的訪問比率高一倍。

    upstream artisanPool{server 10.72.38.235:8080 weight=5;server 10.72.38.235:8081 weight=10;}

    ip_hash(訪問ip)

    每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。

    upstream artisanPool{ip_hash;server 10.72.38.235:8080;server 10.72.38.235:8080;}

    fair(需要下載upstream_fair模塊)

    按后端服務器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。

    upstream artisanPool{server 10.72.38.235:8080;server 10.72.38.235:8080;fair;}

    url_hash(需要使用Nginx的hash軟件包)

    按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。

    注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法。

    upstream artisanPool{server 10.72.38.235:7777;server 10.72.38.235:8888;hash $request_uri;hash_method crc32;}

    upstream模塊中可設置的狀態值

    upstream還可以為每個設備設置狀態值,這些狀態值的含義分別如下:

    • down 表示單前的server暫時不參與負載.

    • weight 默認為1.weight越大,負載的權重就越大。

    • max_fails :允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.

    • fail_timeout : max_fails次失敗后,暫停的時間。

    • backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

    舉例

    #定義負載均衡設備的Ip及設備狀態 upstream artisanPool{ ip_hash;server 10.72.38.235:9090 down;server 10.72.38.235:8080 weight=2;server 10.72.38.235:6060;server 10.72.38.235:7070 backup;}

    驗證反向代理和負載均衡

    將artisan4Nginx 使用maven打包,上傳到服務器上,使用如下命令啟動兩個進程

    java -jar artisan4Nginx-0.0.1-SNAPSHOT.jar --server.port=8080 --logging.file=8080.log > /root/8080.log & tail -f /root/8080.log java -jar artisan4Nginx-0.0.1-SNAPSHOT.jar --server.port=8081 --logging.file=8081.log > /root/8081.log & tail -f /root/8081.log

    啟動nginx后,訪問 http://10.72.38.235/serverInfo

    如果hosts文件配置了 10.72.38.235 artisan ,那么也可以使用 http://artisan/serverInfo 訪問

    觀察兩個進程的日志,因為在nginx中的策略

    server 10.72.38.235:8080 weight=10 max_fails=3 fail_timeout=30s;server 10.72.38.235:8081 weight=10 max_fails=3 fail_timeout=30s;

    weight=10相等,所以1 3 5… 次是落在8080上,2 4 6 …次請求是落在8081上

    說明反向代理+負載均衡是OK的。


    使用keepalived實現Nginx的高可用

    安裝keepalived

    下載地址: http://www.keepalived.org/download.html

    TODO

    總結

    以上是生活随笔為你收集整理的Nginx-从零开始使用nginx实现反向代理及负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。