1. 程式人生 > >nginx安裝、配置、負責均衡、tomcat的動靜分離

nginx安裝、配置、負責均衡、tomcat的動靜分離

nginx下載安裝

nginx下載地址:nginx下載地址
安裝編譯器和依賴庫

yum install gcc gcc-c++ zlib-devel pcre-devel openssl-devel openssl-libs openssl -y

配置:

./configure

nginx安裝:
到nginx根目錄執行 : make && make install
安裝完成,接下來配置環境變數以後就不用使用絕對路徑來操作Nginx了:

vim /etc/profile.d/http.sh

加入以下內容:

export PATH=/usr/local
/nginx/sbin:$PATH

生效配置:

source !$

啟動Nginx

nginx -s 後跟stop、reload來關閉和過載nginx,直接執行nginx則啟動服務。 如果啟動時提示埠被佔用,則需要找出被佔用的程序,或者更改/usr/local/nginx/conf/nginx.conf檔案裡的偵聽埠。

訪問Nginx

在瀏覽器上輸入 http://ip:port 如果出現“Welcome to nginx!”字樣,則證明安裝成功。如果訪問不了,先確認防火牆是否禁止相應埠了。

nginx簡單的配置講解(/usr/local/nginx/ngnix.conf檔案)

http{
負載均衡配置;
server配置;
}


      #開啟程序數 <=CPU數 
      worker_processes  1;
      #自定義錯誤日誌儲存位置,全域性設定,預設logs/error.log
      #error_log  logs/error.log;
   #每個程序最大連線數(最大連線=連線數x程序數)每個worker允許同時產生多少個連結,預設1024
      events {
          worker_connections  1024;
      }
      #
      http {
          #副檔名與檔案型別對映表
          include
mime.types; #預設檔案型別 default_type application/octet-stream; #自定義日誌檔案輸出格式 全域性設定 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #自定義全域性請求日誌儲存位置,全域性設定,預設logs/access.log, 定義格式:檔案儲存位置 + 日誌輸出格式 #access_log logs/access.log main; #打開發送檔案 sendfile on; #連線超時時間 #keepalive_timeout 0; keepalive_timeout 65; #開啟gzip壓縮 #gzip on; #配置虛擬主機,基於域名、ip和埠,可以配置多個server server { #監聽埠,可以是ip:port 或者 port listen 80; #監聽域名,可以是ip或者域名,server_name有三種匹配方式:精準匹配(www.domain.com)、萬用字元匹配(*.domain.com 、www.*)、正則表示式匹配(~^(?.+)\.domain\.com$) server_name localhost; #自定義請求日誌,區域性,當前server有效 #access_log logs/host.access.log main; #錯誤頁面及其返回地址 error_page 500 502 503 504 /50x.html; #請求匹配,同樣有精準(= /index.html)、模糊(~ index)、正則,允許配置多個location location / { #返回根路徑地址(相對路徑:相對於/usr/local/nginx/) root html; #預設主頁 index index.html index.htm; } # location /html { root html; index index.html index.htm; } # } # }

nginx反向代理、動靜分離、負載均衡


#user  nobody;
##最大的工作程序數,一般和CPU的核心數對應
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

##我的給人理解是併發數
events {
    worker_connections  1024;
}


http {
##設定mine型別,型別由mime.type檔案定義
    include       mime.types;
##預設檔案型別
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
##nginx呼叫sendfile函式來輸出檔案,對於普通應用必須為on。如果用來進行下載磁碟IO重負載應用##可以已設定為off

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
##長連結超時時間,單位秒
    keepalive_timeout  65;

    #gzip  on;
#負載均衡
upstream balance {
#預設輪詢,url_hash  根據url均衡   ip_hash  根據ip均衡  least_conn;輪詢
# ip_hash;
#ip_hash;
least_conn;
 #weight 值越大,負載權重越大,請求次數越多  
 #max_fails 允許請求失敗的次數,超過失敗次數後,轉發到下一個伺服器,當有max_fails個請求失敗,就表示後端的伺服器不可用,預設為1,將其設定為0可以關閉檢查   
#fail_timeout 指定時間內無響應則失敗, 在以後的fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的伺服器   
#down 表示當前server不參與負載  
#backup 其他非backup server都忙的時候,backup server作為備用伺服器,將請求轉發到backup伺服器   
server 192.168.1.4 weight=1 max_fails=2 fail_timeout=30s;   
server 192.168.1.20:8080 weight=1 max_fails=2 fail_timeout=30s;  
server 127.0.0.1:8081 down;  
#server 192.168.58.152:8080 backup;  


}




##新建站點
    server {
        listen       80;
        server_name  test.com;
 #自定義請求日誌,區域性,當前server有效  
           #access_log  logs/test.com.log  main;  



        #charset koi8-r;

        #access_log  logs/host.access.log  main;
#靜態資源
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { 
#靜態資源到nginx伺服器下static(具體目錄自定義)獲取 
root static; 
}

#動態資源
 location ~ \.(jsp|jspx|do|action)(\/.*)?$ { 
#動態請求轉發到tomcat伺服器,匹配方式可自定義 
#設定真實
proxy_set_header real_ip $remote_addr; #real_ip 設定變數名,可以通過web端獲取 
#我這裡tomcat的埠為80
#proxy_pass   http://192.168.1.4;
proxy_pass http://balance;  #配置上面新增的負載伺服器 
} 

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    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;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

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

listen 80;

return 500;

}


    # 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
    #
    #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;
    #    }
    #}
}

負載平衡配置示例

#user nobody;
worker_processes 2;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid    logs/nginx.pid;


events {
  accept_mutex on; #設定網路連線序列化,防止驚群現象發生,預設為on
  multi_accept on; #設定一個程序是否同時接受多個網路連線,預設為off
  worker_connections 1024;#最大連線數
}


http {
  include    mime.types;#副檔名與檔案型別對映表,此對映表主要用於部署在本nginx上的靜態資源
  default_type application/octet-stream;

  #日誌格式
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';

  access_log logs/access.log main;

  sendfile    on;
  #tcp_nopush   on;

  #keepalive_timeout 0;
  keepalive_timeout 65;#連線超時時間

  gzip on;

  #反向代理

  #【配置1】此配置是[配置4]和[配置5]的結合
  #此配置將請求轉發到兩個WEB伺服器,根據客戶端IP分配目標主機,同時按權重分配流量
  upstream app1 {
    ip_hash;
    server 192.168.14.132:8080 weight=5;
    server 192.168.14.133:80 weight=3;
  }

  #【配置2】
  #預設負載平衡配置,nginx應用HTTP負載平衡來分發請求。
  #upstream app1 {
  #  server 192.168.14.132:8080;
  #  server 192.168.14.133:80;
  #}

  #【配置3】
  #最小連線負載平衡配置,nginx將盡量不使用繁忙的伺服器,而是將新請求分發給不太忙的伺服器。
  #upstream app1 {
  #  least_conn;
  #  server 192.168.14.132:8080;
  #  server 192.168.14.133:80;
  #}

  #【配置4】
  #會話永續性配置,使用ip-hash,客戶端的IP地址用作雜湊金鑰,
  #以確定應為客戶端請求選擇伺服器組中的哪個伺服器。
  #此方法確保來自同一客戶端的請求將始終定向到同一伺服器,除非此伺服器不可用。
  #upstream app1 {
  #  ip_hash;
  #  server 192.168.14.132:8080;
  #  server 192.168.14.133:80;
  #}

  #【配置5】
  #加權負載平衡配置,通過使用伺服器權重進一步影響nginx負載平衡演算法。
  #未配置權重的伺服器,意味著所有指定的伺服器被視為對特定負載平衡方法同等資格。
  #upstream app1 {
  #  ip_hash;
  #  server 192.168.14.132:8080 weight=3;
  #  server 192.168.14.133:80 weight=2;
  #  server 192.168.14.134:80;
  #  server 192.168.14.135:80;
  #}


  server {#可配置多個server以監聽不同IP和不同埠
    listen    80;#監聽的埠
    server_name localhost;#監聽的伺服器

    #charset koi8-r;

    #access_log logs/host.access.log main;

    #反斜杆代表所有連線,此配置目的是將所有連線交給名為app1的upstream代理,實現負載平衡
    location / {
      proxy_pass http://app1;
    }

    #圖片檔案路徑,一般來說,靜態檔案會部署在本機以加快響應速度
    #可配置多個這樣的location,滿足各種需求
    location ~\.(gif|jpg|png)$ {
      root /home/root/images;
    }

    location ~\.(iso|zip|txt|doc|docx)$ {
      root /home/root/files;
    }


    #error_page 404       /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }


    # FastCGI是CGI全稱是“公共閘道器介面”(Common Gateway Interface)
    #對於我來說,使用Tomcat代替即可,請忽略此配置。
    #location ~ \.php$ {
    #  root      html;
    #  fastcgi_pass  127.0.0.1:9000;
    #  fastcgi_index index.php;
    #  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #  include    fastcgi_params;
    #}

    # 新增黑名單,禁止某某訪問特定檔案
    # 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
  #
  #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;
  #  }
  #}

}

最後附上一個獲取ip的jsp demo

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Welcome to my demo.jsp</title>
    </head>
    <body>
    歡迎 my demo.jsp<br/>
    訪問的 ip 地址:   <%=request.getHeader("real_ip") %> <br/>
    nginx server ip is: <%=request.getRemoteAddr()%>
    </body>
    </html>