CentOS 7安裝Nginx及配置

一 nginx簡述html

 Nginx是一款輕量級的網頁服務器、反向代理服務器。相較於Apache、lighttpd具備佔有內存少,穩定性高等優點。**它最常的用途是提供反向代理服務。**
- 負載均衡 -

 

二 安裝nginx步驟(建議下述安裝過程全程root)nginx

0 概數c++

在Centos下,yum源不提供nginx的安裝,能夠經過切換yum源的方法獲取安裝。也能夠經過直接下載安裝包的方法,**如下命令均需root權限執行**:
   首先安裝必要的庫(nginx 中gzip模塊須要 zlib 庫,rewrite模塊須要 pcre 庫,ssl 功能須要openssl庫)。選定**/usr/local**爲安裝目錄,如下具體版本號根據實際改變。

 

1 安裝gcc gcc-c++web

# yum install -y gcc gcc-c++

 

2 安裝PCRE庫正則表達式

# cd /usr/local/
# wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
# tar -zxvf pcre-8.33.tar.gz
# cd pcre-8.33
# ./configure
# make && make install

 

3 安裝SSL庫算法

# cd /usr/local/
# wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1j.tar.gz
# tar -zxvf openssl-1.0.1j.tar.gz
# cd openssl-1.0.1j
# ./config
# make && make install

 

4 安裝zlib庫數據庫

# cd /usr/local/
# 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

 

5  安裝nginx(本安裝爲1.8.0版本)緩存

# 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 --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11
(注: --with-http_ssl_module:這個不加後面在nginx.conf配置ssl:on後,啓動會報nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常)
# make && make install

 

三 nginx操做命令服務器

1 啓動nginx服務網絡

# /usr/local/nginx/sbin/nginx

 

2 重啓nginx服務

# /usr/local/nginx/sbin/nginx –s reload

 

3 中止nginx服務

# /usr/local/nginx/sbin/nginx –s stop

 

4  強制關閉nginx服務

# pkill nginx

 

四 nginx正反向代理基本配置

#nginx配置
#user  nobody;
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;   #最大鏈接數爲 1024.
}

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

    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;

    #gzip  on;  #http頭壓縮
    
    #正向代理配置
    server {    
        listen       8080;  # 代理監聽端口
        resolver 223.5.5.5; #代理DNS配置
        
        #charset koi8-r;

        access_log  /home/lich/logs/fproxy.access.log;  #accesslog輸出路徑
        error_log /home/lich/logs/fproxy.error.log;     #errorlog輸出路徑
        
        location / {
           
            proxy_pass $scheme://$host$request_uri;     # 配置正向代理參數
            proxy_set_header Host $http_host;           # 解決若是URL中帶"."後Nginx 503錯誤

            proxy_buffers 256 4k;   # 配置緩存大小
            proxy_max_temp_file_size 0;     # 關閉磁盤緩存讀寫減小I/O
            proxy_connect_timeout 30;       # 代理鏈接超時時間

            # 配置代理服務器HTTP狀態緩存時間
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 301 1h;
            proxy_cache_valid any 1m;
        }
    }

    
    #反向代理配置
    server {
        listen       80;
        server_name  test.fw.com;   #代理轉發域名配置

        access_log  /home/lich/logs/rproxy.access.log;
        error_log /home/lich/logs/rproxy.error.log;

        location / {
            proxy_pass http://10.60.221.22:8001;    #代理到後段實際應用服務器地址
            index  index.html index.htm index.jsp;
        }

        #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;
        }
    }
}
nginx.conf

 

 

五 nginx配置參數介紹

1 listen

1.1 配置監聽的ip地址

listen address[:port] [default_server][setfib=number][backlog=number][rcvbuf=size][sndbuf=size][deferred][accept_filter=filter][bind][ssl];

 

1.2 配置監聽端口

listen port[default_server] [setfib=number][backlog=number][rcvbuf=size][sndbuf=size][accept_filter=filter][deferred][bind][ipv6only=on|off][ssl];

 

1.3 配置Unix Domain Socket

listen unix:path [default_server][backlog=number][rcvbuf=size][sndbuf=size][accept_filter=filter][deferred][bind][ssl];

 

1.4 監聽配置用法

listen *:80 | *:8080        #監聽全部80端口和8080端口
listen  IP_address:port     #監聽指定的地址和端口號
listen  IP_address          #監聽指定ip地址全部端口
listen port                 #監聽該端口的全部IP鏈接

 

1.5 參數解釋

- address:IP地址,若是是 IPV6地址,須要使用中括號[] 括起來,好比[fe80::1]等。
- port:端口號,若是隻定義了IP地址,沒有定義端口號,那麼就使用80端口。
- path:socket文件路徑,如 var/run/nginx.sock等。
- default_server:標識符,將此虛擬主機設置爲 address:port 的默認主機。(在 nginx-0.8.21以前使用的是default指令)
- setfib=number:Nginx-0.8.44 中使用這個變量監聽 socket 關聯路由表,目前只對 FreeBSD 起做用,不經常使用。
- backlog=number:設置監聽函數listen()最多容許多少網絡鏈接同時處於掛起狀態,在 FreeBSD 中默認爲 -1,其餘平臺默認爲511.
- rcvbuf=size:設置監聽socket接收緩存區大小。
- sndbuf=size:設置監聽socket發送緩存區大小。
- deferred:標識符,將accept()設置爲Deferred模式。
- accept_filter=filter:設置監聽端口對全部請求進行過濾,被過濾的內容不能被接收和處理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平臺下有效。filter 能夠設置爲 dataready 或 httpready 。
- bind:標識符,使用獨立的bind() 處理此address:port,通常狀況下,對於端口相同而IP地址不一樣的多個鏈接,Nginx 服務器將只使用一個監聽指令,並使用 bind() 處理端口相同的全部鏈接。
- ssl:標識符,設置會話鏈接使用 SSL模式進行,此標識符和Nginx服務器提供的 HTTPS 服務有關。
參數解釋

 

2 server_name
該指令用於虛擬主機的配置。一般分爲如下兩種

2.1 基於名稱的虛擬主機配置

- 語法格式以下:
# server_name   name ...;

- 對於name 來講,能夠只有一個名稱,也能夠有多個名稱,中間用空格隔開。而每一個名字由兩段或者三段組成,每段之間用「.」隔開。
# server_name 123.com www.123.com

- 可使用通配符「*」,但通配符只能用在由三段字符組成的首段或者尾端,或者由兩端字符組成的尾端。
# server_name *.123.com www.123.*

- 還可使用正則表達式,用「~」做爲正則表達式字符串的開始標記。
# server_name ~^www\d+\.123\.com$;

#該表達式「~」表示匹配正則表達式,以www開頭(「^」表示開頭),緊跟着一個0~9之間的數字,在緊跟「.123.co」,最後跟着「m」($表示結尾)以上匹配的順序優先級以下:
①、準確匹配 server_name
②、通配符在開始時匹配 server_name 成功
③、通配符在結尾時匹配 server_name 成功
④、正則表達式匹配 server_name 成功
虛擬主機配置

 

2.2 基於IP地址的虛擬主機配置

#語法結構和基於域名匹配同樣,並且不須要考慮通配符和正則表達式的問題。
server_name 192.168.1.1

 


3 location
# 該指令用於匹配 URL

location [ = | ~ | ~* | ^~] uri {
}

= :用於不含正則表達式的 uri 前,要求請求字符串與 uri 嚴格匹配,若是匹配成功,就中止繼續向下搜索並當即處理該請求。
~ :用於表示 uri 包含正則表達式,而且區分大小寫。
~* :用於表示 uri 包含正則表達式,而且不區分大小寫。
^~ :用於不含正則表達式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字符串匹配度最高的 location 後,當即使用此 location 處理請求,而再也不使用 location 塊中的正則 uri 和請求字符串作匹配。
注意:若是 uri 包含正則表達式,則必需要有 ~ 或者 ~* 標識。

 

4 proxy_pass
# 該指令用於設置被代理服務器的地址。能夠是主機名稱、IP地址加端口號的形式

proxy_pass URL;

# URL 爲被代理服務器的地址,能夠包含傳輸協議、主機名稱或IP地址加端口號,URI等。
proxy_pass  http://www.123.com/uri;

 

5 index

# 該指令用於設置網站的默認首頁。

index  filename ...;

# 後面的文件名稱能夠有多個,中間用空格隔開。
index  index.html index.jsp;

ps:一般該指令有兩個做用:第一個是用戶在請求訪問網站時,請求地址能夠不寫首頁名稱;第二個是能夠對一個請求,根據請求內容而設置不一樣的首頁。

 

六 ngxin負載均衡

1 輪詢算法負載均衡

upstream OrdinaryPolling {
    server 192.168.1.100:8081;
    server 192.168.1.100:8082;
}
server {
listen       80; 
server_name  test.fw.com;

access_log  /home/lich/logs/rproxy_slb.access.log;
error_log /home/lich/logs/rproxy_slb.error.log;

location / {
             proxy_pass http://OrdinaryPolling;
             index  index.html index.htm index.jsp;
             # deny ip
             # allow ip
         
        }
}
輪詢算法負載均衡nginx.conf

 

2 基於比例加權輪詢負載均衡

upstream OrdinaryPolling {
    server 10.60.220.60:8081 weight=2;
    server 10.60.220.60:8082 weight=5;
}
server {
listen       80; 
server_name  test.fw.com;

access_log  /home/lich/logs/rproxy_slb.access.log;
error_log /home/lich/logs/rproxy_slb.error.log;


location / {
             proxy_pass http://OrdinaryPolling;
             # index  index.html index.htm index.jsp;
             # deny ip
             # allow ip
         
        }
}
加權輪詢算法負載均衡nginx.conf

 

3 基於IP路由負載均衡

 場景解釋:咱們知道一個請求在通過一個服務器處理時,服務器會保存相關的會話信息,好比session,可是該請求若是第一個服務器沒處理完,經過nginx輪詢到第二個服務器上,那麼這個服務器是沒有會話信息的。

  最典型的一個例子:用戶第一次進入一個系統是須要進行登陸身份驗證的,首先將請求跳轉到web1應用服務器進行處理,登陸信息是保存在web1應用服務器上的,這時候須要進行別的操做,那麼可能會將請求輪詢到web2應用服務器上,那麼因爲 web2沒有保存會話信息,web2服務器會覺得該用戶沒有登陸,而後繼續登陸一次,若是有多個服務器,每次第一次訪問都要進行登陸,這顯然是很影響用戶體驗的。
這裏產生的一個問題也就是集羣環境下的 session 共享,如何解決這個問題?

  一般由兩種方法:

  1、第一種方法是選擇一箇中間件,將登陸信息保存在一箇中間件上,這個中間件能夠爲 Redis 這樣的數據庫。那麼第一次登陸,咱們將session 信息保存在 Redis 中,跳轉到第二個服務器時,咱們能夠先去Redis上查詢是否有登陸信息,若是有,就能直接進行登陸以後的操做了,而不用進行重複登陸。

  2、第二種方法是根據客戶端的IP地址劃分,每次都將同一個 IP 地址發送的請求都分發到同一個 Tomcat 服務器,那麼也不會存在 session 共享的問題。
而 nginx 的基於 IP 路由負載的機制就是上訴第二種形式。大概配置以下:
upstream OrdinaryPolling {
    server 10.60.220.60:8081 weight=2;
    server 10.60.220.60:8082 weight=5;
    ip_hash;
}
server {
listen       80; 
server_name  test.fw.com;

access_log  /home/lich/logs/rproxy_slb.access.log;
error_log /home/lich/logs/rproxy_slb.error.log;


location / {
             proxy_pass http://OrdinaryPolling;
             # index  index.html index.htm index.jsp;
             # deny ip
             # allow ip
         
        }
}
基於IP路由負載均衡nginx.conf
注意:咱們在 upstream 指令塊中增長了 ip_hash 指令。該指令就是告訴 nginx 服務器,同一個 IP 地址客戶端發送的請求都將分發到同一個 Tomcat 服務器進行處理。

 

4 基於服務器響應時間負載均衡

根據服務器處理請求的時間來進行負載,處理請求越快,也就是響應時間越短的優先分配。
upstream OrdinaryPolling {
    server 10.60.220.60:8081 weight=2;
    server 10.60.220.60:8082 weight=5;
    fair;
}
server {
listen       80; 
server_name  test.fw.com;

access_log  /home/lich/logs/rproxy_slb.access.log;
error_log /home/lich/logs/rproxy_slb.error.log;


location / {
             proxy_pass http://OrdinaryPolling;
             # index  index.html index.htm index.jsp;
             # deny ip
             # allow ip
         
        }
}
基於服務器響應時間負載均衡nginx.conf


5 對不一樣域名實現負載均衡

待補充

相關文章
相關標籤/搜索