以下內(nèi)容為轉(zhuǎn)載,加了QA部分夯到,原文鏈接:http://www.reibang.com/p/d5114a2a2052
QA
1.安裝PCRE庫(kù)里峦萎,會(huì)提示找不到c++編譯庫(kù)
安裝c++
yum install -y gcc gcc-c++
2. 安裝nginx完成后茂契,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)
[error while loading shared libraries: libpcre.so.1](https://www.oschina.net/question/12_78952)
定位錯(cuò)誤原因:
[root@localhost nginx-1.8.0]# ldd $(which /usr/local/nginx/sbin/nginx)
linux-vdso.so.1 => (0x00007fffe61ff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c29c00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003c35400000)
libpcre.so.1 => not found
libz.so.1 => /lib64/libz.so.1 (0x0000003c2ac00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c29800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c29000000)
libfreebl3.so => /lib64/libfreebl3.so (0x0000003c34800000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003c29400000)
解決辦法:
[root@localhost lib64]# cd /lib64
[root@localhost lib64]# ln -s libpcre.so.0.0.1 libpcre.so.1
參考鏈接:http://www.oschina.net/question/12_78952
3. 安裝報(bào)沒(méi)有Perl 5
yum install perl
安裝
在Centos下蝶桶,yum源不提供nginx的安裝,可以通過(guò)切換yum源的方法獲取安裝掉冶。也可以通過(guò)直接下載安裝包的方法真竖,以下命令均需root權(quán)限執(zhí)行:
首先安裝必要的庫(kù)(nginx 中g(shù)zip模塊需要 zlib 庫(kù)脐雪,rewrite模塊需要 pcre 庫(kù),ssl 功能需要openssl庫(kù))恢共。選定/usr/local為安裝目錄战秋,以下具體版本號(hào)根據(jù)實(shí)際改變。
1.安裝PCRE庫(kù)
$ 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
2.安裝zlib庫(kù)
$ 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
3.安裝ssl
$ 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
4.安裝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
5.啟動(dòng)
$ /usr/local/nginx/sbin/nginx
檢查是否啟動(dòng)成功:
打開(kāi)瀏覽器訪(fǎng)問(wèn)此機(jī)器的 IP讨韭,如果瀏覽器出現(xiàn) Welcome to nginx! 則表示 Nginx 已經(jīng)安裝并運(yùn)行成功脂信。
6. 使用非root用戶(hù)啟動(dòng)nginx
su root
chown root:${cws} nginx 啟動(dòng)nginx的用戶(hù)
chmod +s nginx 增加權(quán)限
部分命令如下:
重啟:
$ /usr/local/nginx/sbin/nginx -s reload
停止:
$ /usr/local/nginx/sbin/nginx -s stop
測(cè)試配置文件是否正常:
$ /usr/local/nginx/sbin/nginx -t
強(qiáng)制關(guān)閉:
$ pkill nginx
配置
以上安裝方法nginx的配置文件位于
/usr/local/nginx/conf/nginx.conf
Nginx配置文件常見(jiàn)結(jié)構(gòu)的從外到內(nèi)依次是「http」「server」「location」等等,缺省的繼承關(guān)系是從外到內(nèi)透硝,也就是說(shuō)內(nèi)層塊會(huì)自動(dòng)獲取外層塊的值作為缺省值狰闪。
Server
接收請(qǐng)求的服務(wù)器需要將不同的請(qǐng)求按規(guī)則轉(zhuǎn)發(fā)到不同的后端服務(wù)器上,在 nginx 中我們可以通過(guò)構(gòu)建虛擬主機(jī)(server)的概念來(lái)將這些不同的服務(wù)配置隔離濒生。
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
}
例如我們筆戈玩下的兩個(gè)子項(xiàng)目 passport 和 wan 就可以通過(guò)在 nginx 的配置文件中配置兩個(gè) server埋泵,servername 分別為 passport.bigertech.com 和 wan.bigertech.com。這樣的話(huà)不同的 url 請(qǐng)求就會(huì)對(duì)應(yīng)到 nginx 相應(yīng)的設(shè)置罪治,轉(zhuǎn)發(fā)到不同的后端服務(wù)器上秋泄。
這里的 listen 指監(jiān)聽(tīng)端口,server_name 用來(lái)指定IP或域名规阀,多個(gè)域名對(duì)應(yīng)統(tǒng)一規(guī)則可以空格分開(kāi),index 用于設(shè)定訪(fǎng)問(wèn)的默認(rèn)首頁(yè)地址瘦麸,root 指令用于指定虛擬主機(jī)的網(wǎng)頁(yè)跟目錄谁撼,這個(gè)地方可以是相對(duì)地址也可以是絕對(duì)地址。
通常情況下我們可以在 nginx.conf 中配置多個(gè)server滋饲,對(duì)不同的請(qǐng)求進(jìn)行設(shè)置厉碟。就像這樣:
server {
listen 80;
server_name host1;
root html;
index index.html index.htm;
}
server {
listen 80;
server_name host2;
root /data/www/html;
index index.html index.htm;
}
但是當(dāng) server 超過(guò)2個(gè)時(shí),建議將不同對(duì)虛擬主機(jī)的配置放在另一個(gè)文件中屠缭,然后通過(guò)在主配置文件 nginx.conf 加上 include 指令包含進(jìn)來(lái)箍鼓。更便于管理。
include vhosts/*.conf;
就可以把vhosts的文件都包含進(jìn)去啦呵曹。
Localtion
每個(gè) url 請(qǐng)求都會(huì)對(duì)應(yīng)的一個(gè)服務(wù)款咖,nginx 進(jìn)行處理轉(zhuǎn)發(fā)或者是本地的一個(gè)文件路徑,或者是其他服務(wù)器的一個(gè)服務(wù)路徑奄喂。而這個(gè)路徑的匹配是通過(guò) location 來(lái)進(jìn)行的铐殃。我們可以將 server 當(dāng)做對(duì)應(yīng)一個(gè)域名進(jìn)行的配置,而 location 是在一個(gè)域名下對(duì)更精細(xì)的路徑進(jìn)行配置跨新。
以上面的例子富腊,可以將root和index指令放到一個(gè)location中,那么只有在匹配到這個(gè)location時(shí)才會(huì)訪(fǎng)問(wèn)root后的內(nèi)容:
location / {
root /data/www/host2;
index index.html index.htm;
}
location 匹配規(guī)則
~ 波浪線(xiàn)表示執(zhí)行一個(gè)正則匹配域帐,區(qū)分大小寫(xiě)
~* 表示執(zhí)行一個(gè)正則匹配赘被,不區(qū)分大小寫(xiě)
^~ ^~表示普通字符匹配是整,如果該選項(xiàng)匹配,只匹配該選項(xiàng)民假,不匹配別的選項(xiàng)浮入,一般用來(lái)匹配目錄
= 進(jìn)行普通字符精確匹配
匹配例子:
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何請(qǐng)求,因?yàn)樗姓?qǐng)求都是以"/"開(kāi)始
# 但是更長(zhǎng)字符匹配或者正則表達(dá)式匹配會(huì)優(yōu)先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開(kāi)始的請(qǐng)求阳欲,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg結(jié)尾的請(qǐng)求.
# 但是所有 /images/ 目錄的請(qǐng)求將由 [Configuration C]處理.
[ configuration D ]
}
請(qǐng)求:
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
靜態(tài)文件映射
訪(fǎng)問(wèn)文件的配置主要有 root 和 aliasp's 兩個(gè)指令舵盈。這兩個(gè)指令的區(qū)別容易弄混:
alias
alias后跟的指定目錄是準(zhǔn)確的,并且末尾必須加 /球化。
location /c/ {
alias /a/;
}
如果訪(fǎng)問(wèn)站點(diǎn)http://location/c訪(fǎng)問(wèn)的就是/a/目錄下的站點(diǎn)信息秽晚。
root
root后跟的指定目錄是上級(jí)目錄,并且該上級(jí)目錄下要含有和location后指定名稱(chēng)的同名目錄才行筒愚。
location /c/ {
root /a/;
}
這時(shí)訪(fǎng)問(wèn)站點(diǎn)http://location/c訪(fǎng)問(wèn)的就是/a/c目錄下的站點(diǎn)信息赴蝇。
如果你需要將這個(gè)目錄展開(kāi)伐憾,在這個(gè)location的末尾加上「autoindex on; 」就可以了
轉(zhuǎn)發(fā)
配置起來(lái)很簡(jiǎn)單比如我要將所有的請(qǐng)求到轉(zhuǎn)移到真正提供服務(wù)的一臺(tái)機(jī)器的 8001 端口颗圣,只要這樣:
location / {
proxy_pass 172.16.1.1:8001;
}
這樣訪(fǎng)問(wèn)host時(shí),就都被轉(zhuǎn)發(fā)到 172.16.1.1的8001端口去了纹安。
負(fù)載均衡
upstream myserver; {
ip_hash;
server 172.16.1.1:8001;
server 172.16.1.2:8002;
server 172.16.1.3;
server 172.16.1.4;
}
location / {
proxy_pass http://myserver;
}
我們?cè)?upstream 中指定了一組機(jī)器陆淀,并將這個(gè)組命名為 myserver考余,這樣在 proxypass 中只要將請(qǐng)求轉(zhuǎn)移到 myserver 這個(gè) upstream 中我們就實(shí)現(xiàn)了在四臺(tái)機(jī)器的反向代理加負(fù)載均衡。其中的 ip_hash 指明了我們均衡的方式是按照用戶(hù)的 ip 地址進(jìn)行分配轧苫。另外還有輪詢(xún)楚堤、指定權(quán)重輪詢(xún)、fair含懊、url_hash幾種調(diào)度算法身冬。
總結(jié)
以上是最簡(jiǎn)單的通過(guò) nginx 實(shí)現(xiàn)靜態(tài)文件轉(zhuǎn)發(fā)、反向代理和負(fù)載均衡的配置岔乔。在 nginx 中所有的功能都是通過(guò)模塊來(lái)實(shí)現(xiàn)的酥筝,比如當(dāng)我們配置 upstream 時(shí)是用 upstream 模塊,而 server 和 location 是在 http core 模塊雏门,其他的還有流控的 limt 模塊嘿歌,郵件的 mail 模塊,https 的 ssl 模塊剿配。他們的配置都是類(lèi)似的可以再 nginx 的模塊文檔中找到詳細(xì)的配置說(shuō)明搅幅。
資料
反向代理配置:
http://www.reibang.com/p/bed000e1830b
網(wǎng)站域名rewriter
http://www.tuicool.com/articles/VJJjiqM
完整的nginx配置
http://seanlook.com/2015/05/17/nginx-install-and-config/
nginx多站點(diǎn)配置
http://www.icharm.me/nginx%E5%A4%9A%E7%AB%99%E7%82%B9%E9%85%8D%E7%BD%AE.html
nginx緩存配置
https://linux.cn/article-5945-1.html
http://www.liulichao.com/2016/04/15/nginx-set-cache.html