国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CentOS7安裝維護(hù)Nginx

Anchorer / 2571人閱讀

摘要:安裝這里持續(xù)更新修正是一款面向性能設(shè)計(jì)的服務(wù)器,能反向代理,和郵件相關(guān),,的協(xié)議鏈接。并且提供了負(fù)載均衡以及緩存。所以關(guān)于,有這些標(biāo)簽異步事件模塊化高性能高并發(fā)反向代理負(fù)載均衡系統(tǒng)版本安裝安裝依賴重定向支持和支持,如果不需要可以不安裝。

Nginx 安裝

這里持續(xù)更新修正

Nginx 是一款面向性能設(shè)計(jì)的 HTTP 服務(wù)器,能反向代理 HTTP,HTTPS 和郵件相關(guān)(SMTP,POP3,IMAP)的協(xié)議鏈接。并且提供了負(fù)載均衡以及 HTTP 緩存。它的設(shè)計(jì)充分使用異步事件模型,削減上下文調(diào)度的開銷,提高服務(wù)器并發(fā)能力。采用了模塊化設(shè)計(jì),提供了豐富模塊的第三方模塊。

所以關(guān)于 Nginx,有這些標(biāo)簽:「異步」「事件」「模塊化」「高性能」「高并發(fā)」「反向代理」「負(fù)載均衡」

Linux系統(tǒng):Centos 7 x64
Nginx版本:1.11.5

安裝 安裝依賴
prce(重定向支持)和openssl(https支持,如果不需要https可以不安裝。)
yum -y install pcre*
yum -y install openssl*

CentOS 6.5 我安裝的時(shí)候是選擇的“基本服務(wù)器”,默認(rèn)這兩個(gè)包都沒安裝全,所以這兩個(gè)都運(yùn)行安裝即可。

下載
wget http://nginx.org/download/nginx-1.11.5.tar.gz

# 如果沒有安裝wget
# 下載已編譯版本
$ yum install wget
編譯安裝

然后進(jìn)入目錄編譯安裝,configure參數(shù)說明

cd nginx-1.11.5
./configure

安裝報(bào)錯(cuò)誤的話比如:“C compiler cc is not found”,這個(gè)就是缺少編譯環(huán)境,安裝一下就可以了 yum -y install gcc make gcc-c++ openssl-devel wget

如果沒有error信息,就可以執(zhí)行下邊的安裝了:

make
make install
nginx測(cè)試

運(yùn)行下面命令會(huì)出現(xiàn)兩個(gè)結(jié)果

./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
開機(jī)自啟動(dòng)

編輯 vi /lib/systemd/system/nginx.service 文件,沒有創(chuàng)建一個(gè) touch nginx.service 然后將如下內(nèi)容根據(jù)具體情況進(jìn)行修改后,添加到nginx.service文件中:

[Unit]
Description=nginx1.11.5
After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

設(shè)置開機(jī)啟動(dòng),使配置生效:

systemctl enable nginx.service
運(yùn)維 服務(wù)管理
# 啟動(dòng)
/usr/local/nginx/sbin/nginx

# 重啟
/usr/local/nginx/sbin/nginx -s reload

# 關(guān)閉進(jìn)程
/usr/local/nginx/sbin/nginx -s stop

# 平滑關(guān)閉nginx
/usr/local/nginx/sbin/nginx -s quit

# 查看nginx的安裝狀態(tài),
/usr/local/nginx/sbin/nginx -V 

關(guān)閉防火墻,或者添加防火墻規(guī)則就可以測(cè)試了

service iptables stop

或者編輯配置文件:

vi /etc/sysconfig/iptables

添加這樣一條開放80端口的規(guī)則后保存:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啟服務(wù)即可:

service iptables restart
重啟服務(wù)防火墻報(bào)錯(cuò)解決
service iptables restart
# Redirecting to /bin/systemctl restart  iptables.service
# Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.

在CentOS 7或RHEL 7或Fedora中防火墻由 firewalld 來管理,當(dāng)然你可以還原傳統(tǒng)的管理方式。或則使用新的命令進(jìn)行管理。
假如采用傳統(tǒng)請(qǐng)執(zhí)行一下命令:

# 傳統(tǒng)命令
systemctl stop firewalld
systemctl mask firewalld
# 安裝命令
yum install iptables-services

systemctl enable iptables 
service iptables restart
nginx卸載

如果通過yum安裝,使用下面命令安裝。

yum remove nginx

編譯安裝,刪除/usr/local/nginx目錄即可
如果配置了自啟動(dòng)腳本,也需要?jiǎng)h除。

參數(shù)說明
參數(shù) 說明
--prefix= Nginx安裝路徑。如果沒有指定,默認(rèn)為 /usr/local/nginx。
--sbin-path= Nginx可執(zhí)行文件安裝路徑。只能安裝時(shí)指定,如果沒有指定,默認(rèn)為/sbin/nginx。
--conf-path= 在沒有給定-c選項(xiàng)下默認(rèn)的nginx.conf的路徑。如果沒有指定,默認(rèn)為/conf/nginx.conf。
--pid-path= 在nginx.conf中沒有指定pid指令的情況下,默認(rèn)的nginx.pid的路徑。如果沒有指定,默認(rèn)為 /logs/nginx.pid。
--lock-path= nginx.lock文件的路徑。
--error-log-path= 在nginx.conf中沒有指定error_log指令的情況下,默認(rèn)的錯(cuò)誤日志的路徑。如果沒有指定,默認(rèn)為 /- logs/error.log。
--http-log-path= 在nginx.conf中沒有指定access_log指令的情況下,默認(rèn)的訪問日志的路徑。如果沒有指定,默認(rèn)為 /- logs/access.log。
--user= 在nginx.conf中沒有指定user指令的情況下,默認(rèn)的nginx使用的用戶。如果沒有指定,默認(rèn)為 nobody。
--group= 在nginx.conf中沒有指定user指令的情況下,默認(rèn)的nginx使用的組。如果沒有指定,默認(rèn)為 nobody。
--builddir=DIR 指定編譯的目錄
--with-rtsig_module 啟用 rtsig 模塊
--with-select_module --without-select_module 允許或不允許開啟SELECT模式,如果 configure 沒有找到更合適的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+), rtsig(- 實(shí)時(shí)信號(hào))或者/dev/poll(一種類似select的模式,底層實(shí)現(xiàn)與SELECT基本相 同,都是采用輪訓(xùn)方法) SELECT模式將是默認(rèn)安裝模式
--with-poll_module --without-poll_module Whether or not to enable the poll module. This module is enabled by, default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
--with-http_ssl_module Enable ngx_http_ssl_module. Enables SSL support and the ability to handle HTTPS requests. Requires OpenSSL. On Debian, this is libssl-dev. 開啟HTTP SSL模塊,使NGINX可以支持HTTPS請(qǐng)求。這個(gè)模塊需要已經(jīng)安裝了OPENSSL,在DEBIAN上是libssl
--with-http_realip_module 啟用 ngx_http_realip_module
--with-http_addition_module 啟用 ngx_http_addition_module
--with-http_sub_module 啟用 ngx_http_sub_module
--with-http_dav_module 啟用 ngx_http_dav_module
--with-http_flv_module 啟用 ngx_http_flv_module
--with-http_stub_status_module 啟用 "server status" 頁
--without-http_charset_module 禁用 ngx_http_charset_module
--without-http_gzip_module 禁用 ngx_http_gzip_module. 如果啟用,需要 zlib 。
--without-http_ssi_module 禁用 ngx_http_ssi_module
--without-http_userid_module 禁用 ngx_http_userid_module
--without-http_access_module 禁用 ngx_http_access_module
--without-http_auth_basic_module 禁用 ngx_http_auth_basic_module
--without-http_autoindex_module 禁用 ngx_http_autoindex_module
--without-http_geo_module 禁用 ngx_http_geo_module
--without-http_map_module 禁用 ngx_http_map_module
--without-http_referer_module 禁用 ngx_http_referer_module
--without-http_rewrite_module 禁用 ngx_http_rewrite_module. 如果啟用需要 PCRE 。
--without-http_proxy_module 禁用 ngx_http_proxy_module
--without-http_fastcgi_module 禁用 ngx_http_fastcgi_module
--without-http_memcached_module 禁用 ngx_http_memcached_module
--without-http_limit_zone_module 禁用 ngx_http_limit_zone_module
--without-http_empty_gif_module 禁用 ngx_http_empty_gif_module
--without-http_browser_module 禁用 ngx_http_browser_module
--without-http_upstream_ip_hash_module 禁用 ngx_http_upstream_ip_hash_module
--with-http_perl_module 啟用 ngx_http_perl_module
--with-perl_modules_path=PATH 指定 perl 模塊的路徑
--with-perl=PATH 指定 perl 執(zhí)行文件的路徑
--http-log-path=PATH Set path to the http access log
--http-client-body-temp-path=PATH Set path to the http client request body temporary files
--http-proxy-temp-path=PATH Set path to the http proxy temporary files
--http-fastcgi-temp-path=PATH Set path to the http fastcgi temporary files
--without-http 禁用 HTTP server
--with-mail 啟用 IMAP4/POP3/SMTP 代理模塊
--with-mail_ssl_module 啟用 ngx_mail_ssl_module
--with-cc=PATH 指定 C 編譯器的路徑
--with-cpp=PATH 指定 C 預(yù)處理器的路徑
--with-cc-opt=OPTIONS Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: --with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=OPTIONS Additional parameters passed to the linker. With the use of the system library PCRE in - FreeBSD, it is necessary to indicate --with-ld-opt="-L /usr/local/lib".
--with-cpu-opt=CPU 為特定的 CPU 編譯,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre 禁止 PCRE 庫的使用。同時(shí)也會(huì)禁止 HTTP rewrite 模塊。在 "location" 配置指令中的正則表達(dá)式也需要 PCRE 。
--with-pcre=DIR 指定 PCRE 庫的源代碼的路徑。
--with-pcre-opt=OPTIONS Set additional options for PCRE building.
--with-md5=DIR Set path to md5 library sources.
--with-md5-opt=OPTIONS Set additional options for md5 building.
--with-md5-asm Use md5 assembler sources.
--with-sha1=DIR Set path to sha1 library sources.
--with-sha1-opt=OPTIONS Set additional options for sha1 building.
--with-sha1-asm Use sha1 assembler sources.
--with-zlib=DIR Set path to zlib library sources.
--with-zlib-opt=OPTIONS Set additional options for zlib building.
--with-zlib-asm=CPU Use zlib assembler sources optimized for specified CPU, valid values are: pentium, pentiumpro
--with-openssl=DIR Set path to OpenSSL library sources
--with-openssl-opt=OPTIONS Set additional options for OpenSSL building
--with-debug 啟用調(diào)試日志
--add-module=PATH Add in a third-party module found in directory PATH
配置

在Centos 默認(rèn)配置文件在 /usr/local/nginx-1.5.1/conf/nginx.conf 我們要在這里配置一些文件。nginx.conf是主配置文件,由若干個(gè)部分組成,每個(gè)大括號(hào){}表示一個(gè)部分。每一行指令都由分號(hào)結(jié)束;,標(biāo)志著一行的結(jié)束。

配置文件

nginx 的配置系統(tǒng)由一個(gè)主配置文件和其他一些輔助的配置文件構(gòu)成。這些配置文件均是純文本文件,全部位于 nginx 安裝目錄下的 conf 目錄下。

指令由 nginx 的各個(gè)模塊提供,不同的模塊會(huì)提供不同的指令來實(shí)現(xiàn)配置。
指令除了 Key-Value 的形式,還有作用域指令。

nginx.conf 中的配置信息,根據(jù)其邏輯上的意義,對(duì)它們進(jìn)行了分類,也就是分成了多個(gè)作用域,或者稱之為配置指令上下文。不同的作用域含有一個(gè)或者多個(gè)配置項(xiàng)。

下面的這些上下文指令是用的比較多:

Directive Description Contains Directive
main nginx 在運(yùn)行時(shí)與具體業(yè)務(wù)功能(比如 http 服務(wù)或者 email 服務(wù)代理)無關(guān)的一些參數(shù),比如工作進(jìn)程數(shù),運(yùn)行的身份等。 user, worker_processes, error_log, events, http, mail
http 與提供 http 服務(wù)相關(guān)的一些配置參數(shù)。例如:是否使用 keepalive 啊,是否使用 gzip 進(jìn)行壓縮等。 server
server http 服務(wù)上支持若干虛擬主機(jī)。每個(gè)虛擬主機(jī)一個(gè)對(duì)應(yīng)的 server 配置項(xiàng),配置項(xiàng)里面包含該虛擬主機(jī)相關(guān)的配置。在提供 mail 服務(wù)的代理時(shí),也可以建立若干 server. 每個(gè) server 通過監(jiān)聽的地址來區(qū)分。 listen, server_name, access_log, location, protocol, proxy, smtp_auth, xclient
location http 服務(wù)中,某些特定的 URL 對(duì)應(yīng)的一系列配置項(xiàng)。 index, root
mail 實(shí)現(xiàn) email 相關(guān)的 SMTP/IMAP/POP3 代理時(shí),共享的一些配置項(xiàng)(因?yàn)榭赡軐?shí)現(xiàn)多個(gè)代理,工作在多個(gè)監(jiān)聽地址上)。 server, http, imap_capabilities
include 以便增強(qiáng)配置文件的可讀性,使得部分配置文件可以重新使用。 -
valid_referers 用來校驗(yàn)Http請(qǐng)求頭Referer是否有效。 -
try_files 用在server部分,不過最常見的還是用在location部分,它會(huì)按照給定的參數(shù)順序進(jìn)行嘗試,第一個(gè)被匹配到的將會(huì)被使用。 -
if 當(dāng)在location塊中使用if指令,在某些情況下它并不按照預(yù)期運(yùn)行,一般來說避免使用if指令。 -

例如我們?cè)?nginx.conf 里面引用兩個(gè)配置 vhost/example.com.conf 和 vhost/gitlab.com.conf 它們都被放在一個(gè)我自己新建的目錄 vhost 下面。nginx.conf 配置如下:

worker_processes  1;
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"";

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include  vhost/example.com.conf;
    include  vhost/gitlab.com.conf;
}

簡單的配置: example.com.conf

server {
    #偵聽的80端口
    listen       80;
    server_name  baidu.com app.baidu.com; # 這里指定域名
    index        index.html index.htm;    # 這里指定默認(rèn)入口頁面
    root /home/www/app.baidu.com;         # 這里指定目錄
}
內(nèi)置預(yù)定義變量

Nginx提供了許多預(yù)定義的變量,也可以通過使用set來設(shè)置變量。你可以在if中使用預(yù)定義變量,也可以將它們傳遞給代理服務(wù)器。以下是一些常見的預(yù)定義變量,更多詳見

變量名稱
$args_name 在請(qǐng)求中的name參數(shù)
$args 所有請(qǐng)求參數(shù)
$query_string $args的別名
$content_length 請(qǐng)求頭Content-Length的值
$content_type 請(qǐng)求頭Content-Type的值
$host 如果當(dāng)前有Host,則為請(qǐng)求頭Host的值;如果沒有這個(gè)頭,那么該值等于匹配該請(qǐng)求的server_name的值
$remote_addr 客戶端的IP地址
$request 完整的請(qǐng)求,從客戶端收到,包括Http請(qǐng)求方法、URI、Http協(xié)議、頭、請(qǐng)求體
$request_uri 完整請(qǐng)求的URI,從客戶端來的請(qǐng)求,包括參數(shù)
$scheme 當(dāng)前請(qǐng)求的協(xié)議
$uri 當(dāng)前請(qǐng)求的標(biāo)準(zhǔn)化URI
反向代理

反向代理是一個(gè)Web服務(wù)器,它接受客戶端的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給上游服務(wù)器,并將從服務(wù)器得到的結(jié)果返回給連接的客戶端。下面簡單的反向代理的例子:

server {  
    listen       80;                                                        
    server_name  localhost;                                              
    client_max_body_size 1024M;  # 允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host:$server_port;
    }
}

復(fù)雜的配置: gitlab.com.conf。

server {
    #偵聽的80端口
    listen       80;
    server_name  git.example.cn;
    location / {
        proxy_pass   http://localhost:3000;
        #以下是一些反向代理的配置可刪除
        proxy_redirect             off;
        #后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP
        proxy_set_header           Host $host;
        client_max_body_size       10m; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)
        client_body_buffer_size    128k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)
        proxy_connect_timeout      300; #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
        proxy_send_timeout         300; #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
        proxy_read_timeout         300; #連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
        proxy_buffer_size          4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
        proxy_buffers              4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
        proxy_busy_buffers_size    64k; #高負(fù)荷下緩沖大小(proxy_buffers*2)
    }
}

代理到上游服務(wù)器的配置中,最重要的是proxy_pass指令。以下是代理模塊中的一些常用指令:

指令 說明
proxy_connect_timeout Nginx從接受請(qǐng)求至連接到上游服務(wù)器的最長等待時(shí)間
proxy_send_timeout 后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
proxy_read_timeout 連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
proxy_cookie_domain 替代從上游服務(wù)器來的Set-Cookie頭的domain屬性
proxy_cookie_path 替代從上游服務(wù)器來的Set-Cookie頭的path屬性
proxy_buffer_size 設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers proxy_buffers緩沖區(qū),網(wǎng)頁平均在多少k以下
proxy_set_header 重寫發(fā)送到上游服務(wù)器頭的內(nèi)容,也可以通過將某個(gè)頭部的值設(shè)置為空字符串,而不發(fā)送某個(gè)頭部的方法實(shí)現(xiàn)
proxy_ignore_headers 這個(gè)指令禁止處理來自代理服務(wù)器的應(yīng)答。
proxy_intercept_errors 使nginx阻止HTTP應(yīng)答代碼為400或者更高的應(yīng)答。
負(fù)載均衡

upstream指令啟用一個(gè)新的配置區(qū)段,在該區(qū)段定義一組上游服務(wù)器。這些服務(wù)器可能被設(shè)置不同的權(quán)重,也可能出于對(duì)服務(wù)器進(jìn)行維護(hù),標(biāo)記為down。

upstream  gitlab {
    ip_hash;
    server 192.168.122.11:8081 ;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001 down;
    keepalive 32;
}
server {
    #偵聽的80端口
    listen       80;
    server_name  git.example.cn;
    location / {
        proxy_pass   http://gitlab;    #在這里設(shè)置一個(gè)代理,和upstream的名字一樣
        #以下是一些反向代理的配置可刪除
        proxy_redirect             off;
        #后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP
        proxy_set_header           Host $host;
        proxy_set_header           X-Real-IP $remote_addr;
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size       10m;  #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)
        client_body_buffer_size    128k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)
        proxy_connect_timeout      300;  #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
        proxy_send_timeout         300;  #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
        proxy_read_timeout         300;  #連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
        proxy_buffer_size          4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
        proxy_buffers              4 32k;# 緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
        proxy_busy_buffers_size    64k; #高負(fù)荷下緩沖大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳
    }
}

每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。

負(fù)載均衡:

upstream模塊能夠使用3種負(fù)載均衡算法:輪詢、IP哈希、最少連接數(shù)。

輪詢: 默認(rèn)情況下使用輪詢算法,不需要配置指令來激活它,它是基于在隊(duì)列中誰是下一個(gè)的原理確保訪問均勻地分布到每個(gè)上游服務(wù)器;
IP哈希: 通過ip_hash指令來激活,Nginx通過IPv4地址的前3個(gè)字節(jié)或者整個(gè)IPv6地址作為哈希鍵來實(shí)現(xiàn),同一個(gè)IP地址總是能被映射到同一個(gè)上游服務(wù)器;
最少連接數(shù): 通過least_conn指令來激活,該算法通過選擇一個(gè)活躍數(shù)最少的上游服務(wù)器進(jìn)行連接。如果上游服務(wù)器處理能力不同,可以通過給server配置weight權(quán)重來說明,該算法將考慮到不同服務(wù)器的加權(quán)最少連接數(shù)。

RR

簡單配置 ,這里我配置了2臺(tái)服務(wù)器,當(dāng)然實(shí)際上是一臺(tái),只是端口不一樣而已,而8081的服務(wù)器是不存在的,也就是說訪問不到,但是我們?cè)L問 http://localhost 的時(shí)候,也不會(huì)有問題,會(huì)默認(rèn)跳轉(zhuǎn)到http://localhost:8080具體是因?yàn)镹ginx會(huì)自動(dòng)判斷服務(wù)器的狀態(tài),如果服務(wù)器處于不能訪問(服務(wù)器掛了),就不會(huì)跳轉(zhuǎn)到這臺(tái)服務(wù)器,所以也避免了一臺(tái)服務(wù)器掛了影響使用的情況,由于Nginx默認(rèn)是RR策略,所以我們不需要其他更多的設(shè)置

upstream test {
    server localhost:8080;
    server localhost:8081;
}
server {
    listen       81;                                                        
    server_name  localhost;                                              
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

負(fù)載均衡的核心代碼為

upstream test {
    server localhost:8080;
    server localhost:8081;
}
權(quán)重

指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。 例如

upstream test {
    server localhost:8080 weight=9;
    server localhost:8081 weight=1;
}

那么10次一般只會(huì)有1次會(huì)訪問到8081,而有9次會(huì)訪問到8080

ip_hash

上面的2種方式都有一個(gè)問題,那就是下一個(gè)請(qǐng)求來的時(shí)候請(qǐng)求可能分發(fā)到另外一個(gè)服務(wù)器,當(dāng)我們的程序不是無狀態(tài)的時(shí)候(采用了session保存數(shù)據(jù)),這時(shí)候就有一個(gè)很大的很問題了,比如把登錄信息保存到了session中,那么跳轉(zhuǎn)到另外一臺(tái)服務(wù)器的時(shí)候就需要重新登錄了,所以很多時(shí)候我們需要一個(gè)客戶只訪問一個(gè)服務(wù)器,那么就需要用iphash了,iphash的每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。

upstream test {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
}
fair

這是個(gè)第三方模塊,按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

upstream backend {
    fair;
    server localhost:8080;
    server localhost:8081;
}
url_hash

這是個(gè)第三方模塊,按訪問url的hash結(jié)果來分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。 在upstream中加入hash語句,server語句中不能寫入weight等其他的參數(shù),hash_method是使用的hash算法

upstream backend {
    hash $request_uri;
    hash_method crc32;
    server localhost:8080;
    server localhost:8081;
}

以上5種負(fù)載均衡各自適用不同情況下使用,所以可以根據(jù)實(shí)際情況選擇使用哪種策略模式,不過fair和url_hash需要安裝第三方模塊才能使用

server指令可選參數(shù):

weight:設(shè)置一個(gè)服務(wù)器的訪問權(quán)重,數(shù)值越高,收到的請(qǐng)求也越多;

fail_timeout:在這個(gè)指定的時(shí)間內(nèi)服務(wù)器必須提供響應(yīng),如果在這個(gè)時(shí)間內(nèi)沒有收到響應(yīng),那么服務(wù)器將會(huì)被標(biāo)記為down狀態(tài);

max_fails:設(shè)置在fail_timeout時(shí)間之內(nèi)嘗試對(duì)一個(gè)服務(wù)器連接的最大次數(shù),如果超過這個(gè)次數(shù),那么服務(wù)器將會(huì)被標(biāo)記為down;

down:標(biāo)記一個(gè)服務(wù)器不再接受任何請(qǐng)求;

backup:一旦其他服務(wù)器宕機(jī),那么有該標(biāo)記的機(jī)器將會(huì)接收請(qǐng)求。

keepalive指令:

Nginx服務(wù)器將會(huì)為每一個(gè)worker進(jìn)行保持同上游服務(wù)器的連接。

第三方模塊安裝方法
./configure --prefix=/你的安裝目錄  --add-module=/第三方模塊目錄
常見使用場(chǎng)景 跨域問題

在工作中,有時(shí)候會(huì)遇到一些接口不支持跨域,這時(shí)候可以簡單的添加add_headers來支持cors跨域。配置如下:

server {
  listen 80;
  server_name api.xxx.com;
    
  add_header "Access-Control-Allow-Origin" "*";
  add_header "Access-Control-Allow-Credentials" "true";
  add_header "Access-Control-Allow-Methods" "GET,POST,HEAD";

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host  $http_host;    
  } 
}

上面更改頭信息,還有一種,使用 rewrite 指令重定向URI來解決跨域問題。

upstream test {
  server 127.0.0.1:8080;
  server localhost:8081;
}
server {
  listen 80;
  server_name api.xxx.com;
  location /{ 
    root  html;                   #去請(qǐng)求../html文件夾里的文件
    index  index.html index.htm;  #首頁響應(yīng)地址
  }
  # 用于攔截請(qǐng)求,匹配任何以 /api/開頭的地址,
  # 匹配符合以后,停止往下搜索正則。
  location ^~/api/{ 
    # 代表重寫攔截進(jìn)來的請(qǐng)求,并且只能對(duì)域名后邊的除去傳遞的參數(shù)外的字符串起作用,
    # 例如www.a.com/proxy/api/msg?meth=1&par=2重寫,只對(duì)/proxy/api/msg重寫。
    # rewrite后面的參數(shù)是一個(gè)簡單的正則 ^/api/(.*)$,
    # $1代表正則中的第一個(gè)(),$2代表第二個(gè)()的值,以此類推。
    rewrite ^/api/(.*)$ /$1 break;
    
    # 把請(qǐng)求代理到其他主機(jī) 
    # 其中 http://www.b.com/ 寫法和 http://www.b.com寫法的區(qū)別如下
    # 如果你的請(qǐng)求地址是他 http://server/html/test.jsp
    # 配置一: http://www.b.com/ 后面有“/” 
    #         將反向代理成 http://www.b.com/html/test.jsp 訪問
    # 配置一: http://www.b.com 后面沒有有“/” 
    #         將反向代理成 http://www.b.com/test.jsp 訪問
    proxy_pass http://test;
  } 
}
ssl配置

超文本傳輸安全協(xié)議(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文本傳輸協(xié)議和SSL/TLS的組合,用以提供加密通訊及對(duì)網(wǎng)絡(luò)服務(wù)器身份的鑒定。HTTPS連接經(jīng)常被用于萬維網(wǎng)上的交易支付和企業(yè)信息系統(tǒng)中敏感信息的傳輸。HTTPS不應(yīng)與在RFC 2660中定義的安全超文本傳輸協(xié)議(S-HTTP)相混。

HTTPS 目前已經(jīng)是所有注重隱私和安全的網(wǎng)站的首選,隨著技術(shù)的不斷發(fā)展,HTTPS 網(wǎng)站已不再是大型網(wǎng)站的專利,所有普通的個(gè)人站長和博客均可以自己動(dòng)手搭建一個(gè)安全的加密的網(wǎng)站。

查看目前nginx編譯選項(xiàng)

sbin/nginx -V

輸出下面內(nèi)容

nginx version: nginx/1.7.8
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.5.1 --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

如果依賴的模塊不存在,可以輸入下面命令重新編譯安裝。

./configure --user=www --group=www --prefix=/mt/server/nginx --with-http_stub_status_module --with-openssl=/home/nginx-1.8.0/openssl-1.0.0d --without-http-cache --with-http_ssl_module --with-http_gzip_static_module --with-...

HTTPS server

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate /usr/local/nginx/conf/vjjhd.crt;
    ssl_certificate_key /usr/local/nginx/conf/vjjhd.key;

    # 設(shè)置ssl/tls會(huì)話緩存的類型和大小。如果設(shè)置了這個(gè)參數(shù)一般是shared,buildin可能會(huì)參數(shù)內(nèi)存碎片,默認(rèn)是none,和off差不多,停用緩存。如shared:SSL:10m表示我所有的nginx工作進(jìn)程共享ssl會(huì)話緩存,官網(wǎng)介紹說1M可以存放約4000個(gè)sessions。 
    ssl_session_cache    shared:SSL:1m; 

    # 客戶端可以重用會(huì)話緩存中ssl參數(shù)的過期時(shí)間,內(nèi)網(wǎng)系統(tǒng)默認(rèn)5分鐘太短了,可以設(shè)成30m即30分鐘甚至4h。
    ssl_session_timeout  5m; 
    
    # 選擇加密套件,不同的瀏覽器所支持的套件(和順序)可能會(huì)不同。
    # 這里指定的是OpenSSL庫能夠識(shí)別的寫法,你可以通過 openssl -v cipher "RC4:HIGH:!aNULL:!MD5"(后面是你所指定的套件加密算法) 來看所支持算法。
    ssl_ciphers  HIGH:!aNULL:!MD5;

    # 設(shè)置協(xié)商加密算法時(shí),優(yōu)先使用我們服務(wù)端的加密套件,而不是客戶端瀏覽器的加密套件。
    ssl_prefer_server_ciphers  on;

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/39506.html

相關(guān)文章

  • 阿里云服務(wù)器配置開發(fā)環(huán)境第七章:Centos7.3安裝nginx以及環(huán)境配置

    摘要:是什么是一款輕量級(jí)服務(wù)器也是一款反向代理服務(wù)器能干什么可直接支持和的程序可作為反向代理服務(wù)器作為負(fù)載均衡服務(wù)器作為郵件代理服務(wù)器幫助實(shí)現(xiàn)前端動(dòng)靜分離特點(diǎn)高穩(wěn)定高性能資源占用少功能豐富模塊化結(jié)構(gòu)支持熱部署的安裝安裝輸入查詢版本信息看系統(tǒng)是否 Nginx是什么? Nginx是一款輕量級(jí)Web服務(wù)器,也是一款反向代理服務(wù)器 Nginx能干什么? 可直接支持Rails和PHP的程序 可作為H...

    sourcenode 評(píng)論0 收藏0
  • centos7安裝LNMP(nginx+PHP7.1.9+mysql5.7)

    摘要:開發(fā)這個(gè)分支的原因之一是甲骨文公司收購了后,有將閉源的潛在風(fēng)險(xiǎn)。可以完全兼容,可以成為的替代品。提供了更好的進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程可以平滑重載配置。新版已經(jīng)集成了,可以直接使用。 編譯安裝LNMP 準(zhǔn)備工作 安裝gcc yum -y install gcc-c++ 1、安裝nginx 安裝pcre-devel yum -y install pcre-devel 安裝gzi...

    EsgynChina 評(píng)論0 收藏0
  • centos7安裝LNMP(nginx+PHP7.1.9+mysql5.7)

    摘要:開發(fā)這個(gè)分支的原因之一是甲骨文公司收購了后,有將閉源的潛在風(fēng)險(xiǎn)。可以完全兼容,可以成為的替代品。提供了更好的進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程可以平滑重載配置。新版已經(jīng)集成了,可以直接使用。 編譯安裝LNMP 準(zhǔn)備工作 安裝gcc yum -y install gcc-c++ 1、安裝nginx 安裝pcre-devel yum -y install pcre-devel 安裝gzi...

    Big_fat_cat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Anchorer

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<