<--目錄-->
1)Nginx理論
2)Nginx搭建
【Nginx理論】
Nginx技能要點
Nginx安裝與配置
Nginx虛擬主機
Nginx反向代理
一、nginx簡介(能夠提供網站服務 和 代理服務 開源軟件)
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器
是一個高性能的HTTP和反向代理服務器,同時也是一個
IMAP/POP3/SMTP代理服務器
網站服務器類型
Apache Nginx tomcat(java語言編寫)
nginx 默認地址重寫(修改用戶訪問的url)
conf配置文件 nginx.conf 主配置文件
html網頁目錄
logs日誌文件
sbin服務啓動腳本
絕對路徑啓動服務
/usr/local/nginx/sbin/naginx //直接啓動服務,不做任何配置
相對路徑啓動服務
./nginx //直接啓動服務,不做任何配置
啓動服務
./nginx [選項]
例 ./nginx -t
-t //測試主配置文件有沒有錯誤
-v //查看nginx軟件的版本
-V //查看安裝時候的配置信息
-c //啓動服務時使用哪一個配置文件 [nginx.conf nginx2.conf]
-h //查看幫助信息
-s //關閉服務 #./nginx -s stop
sbin/nginx -c conf/nginx2.conf //-c後面加上要啓動的配置文件名,不加-c默認啓動nginx.conf
nginx.conf nginx2.conf
用
停止nginx服務 (信號不區分大小寫)
格式 : pkill/kill -信號 進程名/pid號
例子 : pkill -int nginx
信號
TERM, INT 快速關閉
QUIT從容關閉,關閉主進程順便關閉工作子進程
HUP 重載配置用新的配置開始新工作進程從容關閉舊的工作進程
USR1重新打開日誌文件
USR2平滑升級可執行程序
WINCH從容關閉工作進程,不會立即關閉子進程
配置說明
安裝目錄/conf/nginx.conf
全局配置:寫在容器外,對所有容器生效
局部配置:寫在容器內,只對當前容器有效
全局配置和局部配置同時配置時,局部配置生效
Nginx反向代理服務方式
1、輪詢(默認的)每個按請求按時間順序逐一分配到不同的後端服務器 如果後斷服務器down掉能自動剔除
2、Weight 指定輪詢機率 權重和訪問比率成正比 通常用於後斷服務器性能不同的情況默認值爲1
Weight=3 weight=2
3、ip_hash 每個請求,按訪問ip地址的hash結果分配 這樣可以讓每個訪客固定訪問一個後端服務器,可
以解決session的問題
4、Fair 按後端服務器的響應時間來分配請求 響應時間短的優先分配(裝第三方軟件纔可以使用)
後端服務器組主機設置詳細信息
down表示當前的server暫時不參與負載
backup 其他所有的非backup機器down或者忙的時候 請求會發給backup機器,
所以這臺機器壓力會最輕
max_fails 允許請求失敗的次數 默認爲1 當超過最大次數時 返回proxy_next_upstream模塊
定義的錯誤
fail_timeout max_fails次失敗後 暫停提供服務的時間
修改主配置文件
vi /usr/lcoal/nginx/conf/nginx.conf
http {
upstream服務器組名{
server真正提供服務的服務器的ip地址:端口號;
server 真正提供服務的服務器的ip地址:端口號;
}
server{
...
location / {
...
proxy_pass http://服務器組名;//允許整個組被輪詢訪問
proxy_pass http://ip:80;//設置單獨一個IP被訪問
}
}
}
配置主配置文件,默認輪詢方式
#cd /usr/lcoal/nginx/conf
vi nginx.conf
http {
upstream webgrp {
server192.168.1.10:80;
server 192.168.1.100:80;
}
server{
...
location / {
...
proxy_pass http://webgrp; //允許整個組被輪詢訪問
#proxy_pass http://192.168.1.10:80; //設置單獨一個IP被訪問
}
}
}
權重方式配置
#vi nginx.conf
http{
upstream webgrp {
server 192.168.1.10:80 weight=2;//5次訪問2次
server 192.168.1.100:80 weight=3;//5次訪問3次
}
...
}
ip_hash方式配置
http{
upstream webgrp{
ip_hash;//每個訪問客固定訪問一個後端服務器
server 192.168.1.10;
server 192.168.1.100;
...
}
}
上述三種配置方式需分開使用
#cd ..;cd sbin
#pkill -hup nginx
公網客戶端測試
#elinks --dump http://1.1.1.254
後端服務器組設置
http{
upstream webgrp {
server 192.168.1.1:80 weight=2;
server 192.168.1.10:80 down; //設置爲down狀態,服務器請求不會發到這臺主機
server 192.168.1.100:80 max_fails=2 fail_timeout=30; //請示最大失敗次數2次,30秒內不再提供服務
server 192.168.1.101:80 backup; //這臺機器性能低,當其他機器不能提供服務的時候,就用使用備份這臺服務器
}
...
}
網頁根目錄
location / { ... }
用來匹配用戶訪問web服務器時的URL
可以使用正則表達式匹配用戶URL
http://www.baidu.com/music/3.mp3
.html
.php
.css
~ 區分字母大小寫匹配
~* 不區分字母大小寫匹配
!~ 區分字母大小寫不匹配
!~* 不區分字母大小寫不匹配
防盜鏈:
別的網站盜用了我網站的圖片,客戶端能通過訪問別的公司的網站,點擊鏈接卻跳到了我公司的頁面
消耗我公司的資源和帶寬,因此需要做防盜鏈,防止別人盜我公司的圖片鏈接
不區分大小寫匹配 以這些做後輟名
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referersnoneblocked www.wsyht.com *.nginx.com;
來源 沒來源 防火牆來的 域 名來的
無效 引擎
if($invalid_referer){ #上面後輟名以上面的那些來源訪問的的就可以訪問,不匹配就返回下面的錯誤頁面
#rewrite ^/ http://192.168.1.254/error.html #返回錯誤頁面
return 404; #或錯誤返回404
}
}
nginx可以用本地模塊做防盜鏈
也可以用第三方模塊做防盜鏈
第三方模塊
nginxhttpaccessmodules
【Nginx搭建】
一、搭建Nginx服務器(Redhat5.9)
用地址192.168.2.1的服務器做網站服務器
準備工作:
#netstat -tulnp | grep :80
#service httpd stop
#chkconfig --level 35 httpd off
#yum -y groupinstall "開發工具" "開發庫"
#yum -y install gcc gcc-c++ make
#yum -y install pcre-devel
安裝(源碼Nginx包)
#cd
#useradd -M -s /sbin/nologin nginx
#tar -zxvf nginx-0.8.55.tar.gz
#cd nginx-0.8.55
#./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module \ #提供nginx狀態查看功能
> --with-http_ssl_module #(依賴於openssl openssl-devel) 後期可以通過https訪問web服務器
#make && make install
啓動服務
#./nainx
訪問本機網頁
#elinks --dump http://localhost
二、平滑升級(在不停止服務的情況下升級軟件版本)
#cd
#tar -zxvf nginx-1.0.5.tar.gz
#cd nginx-1.0.5
#./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module
#make
#cd objs
#mv /usr/local/nginx/sbin/nginx nginx.old
#cp nginx /usr/local/nginx/sbin/
#cd ..
#make upgrade
#/usr/local/naginx/sbin/nginx -v
#elink --dump http://localhost
三、配置Nginx虛擬主機(修改/usr/local/nginx/conf/)
實驗1:
配置基於域名的虛擬主機(通過主機名區分用戶的訪問)
修改主配置文件
#cd /usr/local/nginx/conf
#vi nginx.conf
...
http{
server{
listen 80;
server_name www.wsyht.com;
location / {
root /www;
index index.html;
}
}
server{
listen 80;
server_name bbs.wsyht.com;
location / {
root /bbs;
index index.html;
}
}
}
...
創建網頁目錄和網頁文件
#mkdir /www;echo www.wsyht.com > /www/index.html
#mkdir /bbs;echo bbs.wsyht.com > /bbs/index.html
檢測服務
#/usr/local/nginx/sbin/nginx -t
關閉重啓服務
#/usr/loca/nginx/sbin/nginx -s stop
#/usr/local/nginx/sbin/nginx
修改host文件(域名解析)
#vi /etc/hosts
...
192.168.2.1www.wsyht.comwww
192.168.2.1bbs.wsyht.combbs
測試
#elinks --dump http//www.wsyht.com
#elinks --dump http//bbs.wsyht.com
實驗二:
配置基於端口的虛擬主機
修改主配置文件
#cd /usr/local/nginx/conf/
#vi nginx.conf
...
http{
server{
listen 8080;
server_name dns.baidu.com;
location / {
root /dns;
index index.html;
}
}
server{
listen 8090;
server_name blog.baidu.com;
location / {
root /blog;
index index.html;
}
}
...
創建網頁目錄和網頁文件
#mkdir /dns;echo "www.baidu.com" > /dns/index.html
#mkdir /blog;echo "bbs.baidu.com" > /blog/index.html
服務測試重啓
#/usr/local/nginx/sbin/nginx -t
#pkill -hup nginx
修改host文件(域名解析)
#vi /etc/hosts
...
192.168.2.1 www.baidu.com www
192.168.2.1 bbs.baidu.com bbs
測試
elinks --dump http://www.baidu.com:8080
elinks --dump http://bbs.baidu.com:8090
實驗三
配置基於ip的虛擬主機
修改主配置文件
#cd /usr/local/nginx/conf/
#vim nginx.conf
...
http{
server{
listen 192.168.2.2:80;
server_name mail.baidu.com;
location / {
root /mail;
index index.html;
}
}
server{
listen 192.168.2.3:80;
server_name fack.baidu.com;
location / {
root /fack
index index.html;
}
}
...
創建網頁目錄和網頁文件
#mkdir /mail;echo "mail.baidu.com" > /mail/index.html
#mkdir /fack;echo "fack.baidu.com" > /fack/index.html
服務測試重啓
#/usr/local/nginx/sbin/nginx -t
#pkill -hup nginx
修改host文件(域名解析)
#vi /etc/hosts
...
192.168.2.2 mail.baidu.com mail
192.168.2.3 fack.baidu.com fack
添加臨時虛擬網卡端口
#ifconfig eth0:0 192.168.2.2
#ifconfig eth0:0 192.168.2.3
測試
#elinks --dump http://192.168.2.2
#elinks --dump http://192.168.2.3
四、客戶端訪問控制
...
http{
server{
listen www.baidu.com:80;
server_name www.baidu.com;
location / {
allow 192.168.2.2 //允許2.2訪問
deny all //拒絕所有
root /www;
index index.html;
}
}
server{
listen www.baidu.com:80;
server_name www.baidu.com;
location / {
deny 192.168.2.2//拒絕2.2訪問
allow all//允許所有
root /www;
index index.html;
}
}
}
...
五、用戶訪問控制
#cd /usr/local/nginx/conf
#vi nginx.conf
...
http{
server{
listen www.baidu.com:80;
server_name www.baidu.com;
location / {
auth_basic "auth-domain" //指定認證域的名字,名字隨便取
auth_basic_user_file /usr/local/nginx/conf/authuser.txt //保存用戶名的文件,最後面文件名隨便取
root /www;
index index.html;
}
}
...
#htpasswd -c /usr/local/nginx/conf/authuser.txt admin //創建文件authuser.txt和訪問用戶名admin,密碼隨便填
#htpasswd /usr/local/nginx/conf/authuser.txt jack //創建用戶名jack,密碼隨便填
六、Nginx反向代理
拓撲圖:
公網客戶端
1.1.1.1 http://1.1.1.254
| 1.1.1.254
|
| nginx | 反向代理服務器
|
192.158.1.254 | |
----------------------------------------------
| |
web_A web_B
192.168.1.10 192.168.1.100
1、配置內網的2臺網站服務器 並編寫首頁文件
詳細過程請參考最上面實驗,過程略...
2、開啓nginx服務器
詳細過程請參考最上面實驗,過程略...
3、配置nginx反向代理
配置主配置文件,默認輪詢方式
#cd /usr/lcoal/nginx/conf
vi nginx.conf
http {
upstream webgrp {
server192.168.1.10:80;
server 192.168.1.100:80;
}
server{
...
location / {
...
proxy_pass http://webgrp; //允許整個組被輪詢訪問
}
}
}
重啓服務
#cd ..;cd sbin
#pkill -hup nginx
公網客戶端測試
#elinks --dump http://1.1.1.254
防盜料
拓撲圖:
192.168.1.10------------192.168.1.100------------------192.168.1.254
客戶端 盜鏈網站nginx網站服務器(配置圖片防盜鏈)
盜鏈網站配置
啓動服務
#servcie httpd start
編寫網頁文件
#cat /var/www/html/test.html
<html>
<body>
<a href="http://192.168.1.254/one.png">show image</a>
</body>
</html>
重啓服務
#service httpd restart
Nginx網站服務器配置
在主配置文件配置防盜鏈
vi /usr/local/nginx/conf/nginx.conf
http{
server{
...
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.wsyht.com *.nginx.com;
if ($invalid_referer) {
rewrite ^/ http://192.168.1.254/error.html
#return 404;
}
}
...
}
}
配置錯誤文件
#echo "Error Page" > /usr/local/nginx/html/error.html
編寫網頁文件
#cat /var/www/html/test.html
<html>
<body>
<a href="http://192.168.1.254/one.png">show image</a>
</body>
</html>
重啓服務
#pkill -hup nginx
客戶端配置
安裝圖形界面
#yum groupinstall -y "圖形" //支持圖形頁面瀏覽
修改host文件
#vi /etc/hosts
...
192.168.1.254www.wsyht.com www
瀏覽器訪問測試
#http://192.168.1.100/test.html
#http://www.wsyht.com/test.html