1. 程式人生 > >centos 6.5 下 nginx 簡單優化_虛擬主機_負載均衡

centos 6.5 下 nginx 簡單優化_虛擬主機_負載均衡

# 用了nginx for win很久,安裝也是超級簡單。
# 還是用一下linux版的吧。環境是centos 6.5 x64

複製程式碼
# 安裝開始:
# 先安裝依賴
yum install gcc-c++ 
yum -y install pcre* 
yum -y install openssl*

# 下載,可以wget 目前最新1.15.3
cd /opt
wget http://nginx.org/download/nginx-1.12.2.tar.gz

tar zxf nginx-1.12.2.tar.gz 
cd nginx-1.12.2

# 指定安裝目錄 、編譯安裝
./configure --prefix=/opt/nginx
make && make install

# 檢查測試
/opt/nginx/sbin/nginx -t
複製程式碼

 

# 啟動  停止  退出 

/opt/nginx/sbin/nginx 
/opt/nginx/sbin/nginx -s stop
/opt/nginx/sbin/nginx -s quit
# 如果是centos7以上,已經註冊為系統服務的:
systemctl stop nginx
systemctl start nginx
#---------------- 官方文件: -s 引數------------
# stop — fast shutdown
# quit — graceful shutdown
# reload — reloading the configuration file
# reopen — reopening the log files
#----------------------------------------------

 

# 檢視程序,埠  檢查執行情況

複製程式碼
ps aux |grep nginx # master worker 至少各一個
netstat -tulnp | grep :80

# 如果想要命令方便執行,可將路徑加入PATH變數中
vim /etc/profile # 加入 2 行

export NGINX_HOME=/opt/nginx
export PATH=$NGINX_HOME/sbin:$PATH

source /etc/profile # 生效
複製程式碼

 

#-------------------- 配置檔案 nginx.conf ---------------------------

以下版本有一些簡單的優化, 注意那些寫有註釋的行。

複製程式碼
user nginx;
worker_processes auto; # 程序數,一般設定為CPU核數,或者 auto 
pid /var/run/nginx.pid; # 記錄程序PID檔案,可以不啟用

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
use epoll; # 使用高效的 epoll 方式
worker_connections 65535; # 單個worker程序同時開啟的最大連線數 跟系統的 ulimit -n 有關
}

http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off; # 隱藏web出錯時的版本號

 
複製程式碼

 

虛擬主機 

超簡單配置 基於不同域名的虛擬主機,其實就是:根據訪問的不同網址對應不同的nginx中的不同資料夾。

先備份一個conf/nginx.conf檔案,然後修改 http{}中的server, 刪除原有的,示例如下:

複製程式碼
## 注意:下面僅僅是http{}部分,不是nginx.conf的全部
http {
    server_tokens  on; 
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server { # 建立服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        ## location 匹配URL路徑地址,/ 表示匹配所有路徑  =開頭表示精確匹配  ~區分大小寫  ~*不區分大小寫(預設不區分)
        location / {  
            root   data/www;  # 根目錄對應真實資料夾
            index  index.html index.htm index.jsp;
        }
    }
    
    server {
        listen       80;
        server_name  bbs.node-6.com;
        location / {
            root   data/bbs;
            index  index.html index.htm index.jsp;
        }
    }

}
複製程式碼

對應地,需要在nginx下建立目錄 data/www 和 data/bbs 以及各自目錄下的檔案。

執行 nginx -s reload 重新載入配置檔案。 配置好DNS解析或hosts檔案,瀏覽器測試訪問。

 

超簡單配置 基於不同埠號的虛擬主機,其實就是:根據訪問網址的不同埠 對應不同的nginx中的不同資料夾。

和上面的配置差不多,只不過域名相同,listen不同:

複製程式碼
    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            root   data/www;  # 根目錄對應真實資料夾
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       81;
        server_name  wwww.node-6.com;
        location / {
            root   data/bbs;
            index  index.html index.htm index.jsp;
        }
    }
    server {
        listen       82;
        server_name  wwww.node-6.com;
        location / {
            root   data/img;
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

同樣,nginx -s reload 即可生效。

 

配置 nginx 反向代理

和上面的虛擬主機配置差不多,既可以不同埠,也可以不同域名,關鍵詞 proxy_pass  示例如下:

複製程式碼
## 不同埠的反向代理  server{}部分

    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            proxy_pass  http://127.0.0.1:8080;  # 反向代理本地 tomcat
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       81;
        server_name  www.node-6.com;  # 域名
        location / {
            proxy_pass  http://127.0.0.1:8081;  # 反向代理
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼 複製程式碼
## 不同域名的反向代理  server{}部分

    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            proxy_pass  http://127.0.0.1:8080;  # 反向代理本地 tomcat
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       80;
        server_name  bbs.node-6.com;  # 域名
        location / {
            proxy_pass  http://127.0.0.1:8081;  # 本地另一個 tomcat
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

配置完成後,同樣,nginx -s reload 即可生效。

 

不同Location 做反向代理,示例如下:

複製程式碼
## 不同Location的反向代理  server{}部分
## 注意目標地址末尾要有/

    server { # 服務
        listen       80;
        server_name  www.node-6.com;  # 域名
        location /www {  # 末尾有無/不影響
            proxy_pass  http://127.0.0.1:8080/;  # 末尾一定要/
            index  index.html index.htm index.jsp;
        }
        location /bbs {
            proxy_pass  http://127.0.0.1:8081/; 
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

 

負載均衡:

使用 upstream 方式,配置也很簡單:在server{} 上面定義一個 upstream backServer 然後在proxy_pass中指向backServer  示例如下:

複製程式碼
## 以下部分全部應在 http{}內:
## 定義多個上游伺服器(真實業務)伺服器的IP和埠,預設採用輪詢機制
    upstream backServer{
        server 127.0.0.1:8080;
        server 192.168.112.5:8080;
    }

    server {
        listen       80;
        server_name  www.node-6.com;  # 域名
        location / {
            proxy_pass  http://backServer/;  # 末尾一定要/
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

負載均衡的方式:

輪詢機制:輪流訪問,非常均勻

權重機制:使用weight配置比例

ip hash: nginx獲取IP地址hash運算固定分配到某伺服器上,可以解決session共享問題

fair :第三方

url繫結:第三方 

 

權重機制的設定和上面的簡單設定差不多,只在目標後面加了weight。示例如下:

    upstream backServer{
        server 127.0.0.1:8080 weight=1;
        server 192.168.112.5:8080 weight=3;
    }

 

IP繫結方式,只是多了行 ip_hash; 

upstream backServer{
        server 127.0.0.1:8080;
        server 192.168.112.5:8080;
        ip_hash;
    }

 

一般情況下,可能實際生產環境,配置輪詢機制或者權重機制比較多見。

如果上游伺服器有個突然掛了怎麼辦? 

所以,要設定好nginx的故障轉移,示例如下:

複製程式碼
## http{}中的兩段配置
upstream backServer{ server 127.0.0.1:8080; server 127.0.0.1:8081; server 192.168.112.5:8080; } server { listen 80; server_name www.node-6.com; # 域名 location / { proxy_pass http://backServer/; # 末尾一定要/ ## 故障轉移:設定超時時間 proxy_connect_timeout 1s; proxy_send_timeout 1s; proxy_read_timeout 1s; index index.html index.htm index.jsp; } }
複製程式碼

 

URL重寫:

參考:http://www.cnblogs.com/czlun/articles/7010604.html

    https://www.linuxidc.com/Linux/2014-01/95493.htm

 rewrite    <regex>    <replacement>    [flag];

關鍵字      正則        替代內容          flag標記

 

    。關鍵字:其中關鍵字error_log不能改變

    。正則:perl相容正則表示式語句進行規則匹配

    。替代內容:將正則匹配的內容替換成replacement

    。flag標記:rewrite支援的flag標記

 

flag標記說明:

last  #本條規則匹配完成後,繼續向下匹配新的location URI規則

break  #本條規則匹配完成即終止,不再匹配後面的任何規則

redirect  #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址

permanent  #返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

 

rewrite引數的標籤段位置:

server, location, if

 

 實際配置檔案示例: nginx/default.conf

 

  分類:  Server 標籤:  nginxepoll反向代理負載均衡故障轉移proxy_passlocationtomcaturl重寫

# 用了nginx for win很久,安裝也是超級簡單。
# 還是用一下linux版的吧。環境是centos 6.5 x64

複製程式碼
# 安裝開始:
# 先安裝依賴
yum install gcc-c++ 
yum -y install pcre* 
yum -y install openssl*

# 下載,可以wget 目前最新1.15.3
cd /opt
wget http://nginx.org/download/nginx-1.12.2.tar.gz

tar zxf nginx-1.12.2.tar.gz 
cd nginx-1.12.2

# 指定安裝目錄 、編譯安裝
./configure --prefix=/opt/nginx
make && make install

# 檢查測試
/opt/nginx/sbin/nginx -t
複製程式碼

 

# 啟動  停止  退出 

/opt/nginx/sbin/nginx 
/opt/nginx/sbin/nginx -s stop
/opt/nginx/sbin/nginx -s quit
# 如果是centos7以上,已經註冊為系統服務的:
systemctl stop nginx
systemctl start nginx
#---------------- 官方文件: -s 引數------------
# stop — fast shutdown
# quit — graceful shutdown
# reload — reloading the configuration file
# reopen — reopening the log files
#----------------------------------------------

 

# 檢視程序,埠  檢查執行情況

複製程式碼
ps aux |grep nginx # master worker 至少各一個
netstat -tulnp | grep :80

# 如果想要命令方便執行,可將路徑加入PATH變數中
vim /etc/profile # 加入 2 行

export NGINX_HOME=/opt/nginx
export PATH=$NGINX_HOME/sbin:$PATH

source /etc/profile # 生效
複製程式碼

 

#-------------------- 配置檔案 nginx.conf ---------------------------

以下版本有一些簡單的優化, 注意那些寫有註釋的行。

複製程式碼
user nginx;
worker_processes auto; # 程序數,一般設定為CPU核數,或者 auto 
pid /var/run/nginx.pid; # 記錄程序PID檔案,可以不啟用

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
use epoll; # 使用高效的 epoll 方式
worker_connections 65535; # 單個worker程序同時開啟的最大連線數 跟系統的 ulimit -n 有關
}

http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off; # 隱藏web出錯時的版本號

 
複製程式碼

 

虛擬主機 

超簡單配置 基於不同域名的虛擬主機,其實就是:根據訪問的不同網址對應不同的nginx中的不同資料夾。

先備份一個conf/nginx.conf檔案,然後修改 http{}中的server, 刪除原有的,示例如下:

複製程式碼
## 注意:下面僅僅是http{}部分,不是nginx.conf的全部
http {
    server_tokens  on; 
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server { # 建立服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        ## location 匹配URL路徑地址,/ 表示匹配所有路徑  =開頭表示精確匹配  ~區分大小寫  ~*不區分大小寫(預設不區分)
        location / {  
            root   data/www;  # 根目錄對應真實資料夾
            index  index.html index.htm index.jsp;
        }
    }
    
    server {
        listen       80;
        server_name  bbs.node-6.com;
        location / {
            root   data/bbs;
            index  index.html index.htm index.jsp;
        }
    }

}
複製程式碼

對應地,需要在nginx下建立目錄 data/www 和 data/bbs 以及各自目錄下的檔案。

執行 nginx -s reload 重新載入配置檔案。 配置好DNS解析或hosts檔案,瀏覽器測試訪問。

 

超簡單配置 基於不同埠號的虛擬主機,其實就是:根據訪問網址的不同埠 對應不同的nginx中的不同資料夾。

和上面的配置差不多,只不過域名相同,listen不同:

複製程式碼
    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            root   data/www;  # 根目錄對應真實資料夾
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       81;
        server_name  wwww.node-6.com;
        location / {
            root   data/bbs;
            index  index.html index.htm index.jsp;
        }
    }
    server {
        listen       82;
        server_name  wwww.node-6.com;
        location / {
            root   data/img;
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

同樣,nginx -s reload 即可生效。

 

配置 nginx 反向代理

和上面的虛擬主機配置差不多,既可以不同埠,也可以不同域名,關鍵詞 proxy_pass  示例如下:

複製程式碼
## 不同埠的反向代理  server{}部分

    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            proxy_pass  http://127.0.0.1:8080;  # 反向代理本地 tomcat
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       81;
        server_name  www.node-6.com;  # 域名
        location / {
            proxy_pass  http://127.0.0.1:8081;  # 反向代理
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼 複製程式碼
## 不同域名的反向代理  server{}部分

    server { # 服務
        listen       80;
        server_name  wwww.node-6.com;  # 域名
        location / { 
            proxy_pass  http://127.0.0.1:8080;  # 反向代理本地 tomcat
            index  index.html index.htm index.jsp;
        }
    }    
    server {
        listen       80;
        server_name  bbs.node-6.com;  # 域名
        location / {
            proxy_pass  http://127.0.0.1:8081;  # 本地另一個 tomcat
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

配置完成後,同樣,nginx -s reload 即可生效。

 

不同Location 做反向代理,示例如下:

複製程式碼
## 不同Location的反向代理  server{}部分
## 注意目標地址末尾要有/

    server { # 服務
        listen       80;
        server_name  www.node-6.com;  # 域名
        location /www {  # 末尾有無/不影響
            proxy_pass  http://127.0.0.1:8080/;  # 末尾一定要/
            index  index.html index.htm index.jsp;
        }
        location /bbs {
            proxy_pass  http://127.0.0.1:8081/; 
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

 

負載均衡:

使用 upstream 方式,配置也很簡單:在server{} 上面定義一個 upstream backServer 然後在proxy_pass中指向backServer  示例如下:

複製程式碼
## 以下部分全部應在 http{}內:
## 定義多個上游伺服器(真實業務)伺服器的IP和埠,預設採用輪詢機制
    upstream backServer{
        server 127.0.0.1:8080;
        server 192.168.112.5:8080;
    }

    server {
        listen       80;
        server_name  www.node-6.com;  # 域名
        location / {
            proxy_pass  http://backServer/;  # 末尾一定要/
            index  index.html index.htm index.jsp;
        }
    }
複製程式碼

負載均衡的方式:

輪詢機制:輪流訪問,非常均勻

權重機制:使用weight配置比例

ip hash: nginx獲取IP地址hash運算固定分配到某伺服器上,可以解決session共享問題

fair :第三方

url繫結:第三方 

 

權重機制的設定和上面的簡單設定差不多,只在目標後面加了weight。示例如下:

    upstream backServer{
        server 127.0.0.1:8080 weight=1;
        server 192.168.112.5:8080 weight=3;
    }

 

IP繫結方式,只是多了行 ip_hash; 

upstream backServer{
        server 127.0.0.1:8080;
        server 192.168.112.5:8080;
        ip_hash;
    }

 

一般情況下,可能實際生產環境,配置輪詢機制或者權重機制比較多見。

如果上游伺服器有個突然掛了怎麼辦? 

所以,要設定好nginx的故障轉移,示例如下:

複製程式碼
## http{}中的兩段配置
upstream backServer{ server 127.0.0.1:8080; server 127.0.0.1:8081; server 192.168.112.5:8080; } server { listen 80; server_name www.node-6.com; # 域名 location / { proxy_pass http://backServer/; # 末尾一定要/ ## 故障轉移:設定超時時間 proxy_connect_timeout 1s; proxy_send_timeout 1s; proxy_read_timeout 1s; index index.html index.htm index.jsp; } }
複製程式碼

 

URL重寫:

參考:http://www.cnblogs.com/czlun/articles/7010604.html

    https://www.linuxidc.com/Linux/2014-01/95493.htm

 rewrite    <regex>    <replacement>    [flag];

關鍵字      正則        替代內容          flag標記

 

    。關鍵字:其中關鍵字error_log不能改變

    。正則:perl相容正則表示式語句進行規則匹配

    。替代內容:將正則匹配的內容替換成replacement

    。flag標記:rewrite支援的flag標記

 

flag標記說明:

last  #本條規則匹配完成後,繼續向下匹配新的location URI規則

break  #本條規則匹配完成即終止,不再匹配後面的任何規則

redirect  #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址

permanent  #返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

 

rewrite引數的標籤段位置:

server, location, if

 

 實際配置檔案示例: nginx/default.conf