Nginx服務器、Nginx虛擬主機、Nginx反向代理
nginx升級【make upgrade】
nginx【默認welcome測試網站】
nginx【用戶認證】
nginx 【server{ }虛擬主機】
nginx【加密安全,密鑰,證書】
nginx【調度器】多臺後臺web,負載均衡,web高可用
1 案例1:搭建Nginx服務器
nginx 並發量大,5w。速度快,穩定
apache 並發量2-3w
linux,nginx軟件都是模塊化設計 用戶隨便挑選功能安裝模塊,挑選越少越穩定
./configure 什麽參數也不加就會安裝默認模塊
./configure --with-模塊名稱_xxx_module
--help 可以顯示所有模塊
1.1 問題
在IP地址為192.168.4.5的主機上安裝部署Nginx服務,並可以將Nginx服務器,要求編譯時啟用如下功能:
?SSL加密功能
?設置Nginx賬戶及組名稱均為nginx
可選項:Nginx服務器升級到更高版本。
然後客戶端訪問頁面驗證Nginx Web服務器:
?使用火狐瀏覽器訪問
?使用curl訪問
1.2 方案
使用2臺RHEL6虛擬機,其中一臺作為Nginx服務器(192.168.4.5)、另外一臺作為測試用的Linux客戶機(192.168.4.100),如圖-1所示。
圖-1
安裝nginx-1.8.0版本時,需要使用如下參數:
?with-http_ssl_module:提供SSL加密功能
?group:指定組
1.3 步驟
步驟一:構建Nginx服務器
1)使用源碼包安裝nginx軟件包
1.[root@svr5 ~]# yum –y install gcc 必須的 pcre-devel 支持正則openssl-devel???支持加密?????//安裝常見依賴包 【yum需要搭好】
2.[root@svr5 ~]# useradd –s /sbin/nologin nginx
3.[root@svr5 ~]# tar -xf nginx-1.8.0.tar.gz
4.[root@svr5 ~]# cd nginx-1.8.0
5.[root@svr5 nginx-1.8.0]# ./configure --with-http_ssl_modole 增加模塊化設計,默認是20,擴大功能
7.> --user=nginx \????????????????????????????//指定用戶
8.> --group=nginx \????????????????????????????//指定組
9.> --with-http_ssl_module????????????????????????//開啟SSL加密功能
【[root@Proxy conf]# cd
[root@Proxy ~]# ls
[root@Proxy ~]# cd lnmp_soft/
[root@Proxy lnmp_soft]# ls
[root@Proxy lnmp_soft]# cd nginx-1.8.0/
[root@Proxy nginx-1.8.0]# ./configure --help
查詢--with 所帶的功能】
- .. ..
11.[root@svr5 nginx-1.7.10]# make && make install????//編譯並安裝
Make 【C語言源碼--二進制】【編譯新的nginx】objs/nginx
Make install (升級時不要寫)【 cp objs/nginx /usr/local/nginx/sbin】
升級有風險。老版本需要備份。
2)nginx命令的用法
1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx????????????????????//啟動服務
2.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s stop????????????//關閉服務
3.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload????????//重新加載配置文件 不用重啟
4.[root@svr5 ~]# /usr/local/nginx/sbin/nginx –V????????????????//查看軟件信息 nginx -V 快速了解已安裝的nginx狀態
nginx服務默認通過TCP 80端口監聽客戶端請求:
1.[root@svr5 ~]# netstat -anptu | grep nginx
2.tcp????????0????????0 0.0.0.0:80????????0.0.0.0:*????????LISTEN????????10441/nginx
如果失敗就killall squid 或varnish, 解決端口沖突
Nginx [firefox http://192.168.4.5] 界面為Welcome to nginx!
不重啟的情況下直接生效:nginx -s reload
看nginx 的版本信息:nginx -V (別人的服務器新手可以查看這個)
3)為Nginx Web服務器建立測試首頁文件
Nginx Web服務默認首頁文檔存儲目錄為/usr/local/nginx/html/,在此目錄下建立一個名為index.html的文件:
1.[root@svr5 ~]# cat /usr/local/nginx/html/index.html
2.<html>
3.<head>
4.<title>Welcome to nginx!</title>
5.</head>
6.<body bgcolor="white" text="black">
7.<center><h1>Welcome to nginx!</h1></center>
8.</body>
9.</html>
步驟二:升級Nginx服務器
1)編譯新版本nginx軟件 盡量不要跨版本升級,防止不穩定,跨不要跨太多
1.[root@svr5 ~]# tar -zxvf nginx-1.9.0.tar.gz
2.[root@svr5 ~]# cd nginx-1.9.0
3.[root@svr5 nginx-1.9.0]# ./configure \
4.> --prefix=/usr/local/nginx \
5.> --user=nginx \
6.> --group=nginx \
7.> --with-http_ssl_module
8.[root@svr5 nginx-1.9.0]# make?不用make install,只是升級就好
2) 備份老的nginx主程序,並使用編譯好的新版本nginx替換老版本
1.[root@svr5 nginx-1.9.0]# mv /usr/local/nginx/sbin/nginx \
2.>/usr/local/nginx/sbin/nginxold 保留一份老版本以防有用
3.[root@svr5 nginx-1.9.0]# cp objs/nginx /usr/local/nginx/sbin/????//拷貝新版本
4.[root@svr5 nginx-1.9.0]# make upgrade????????????????????????????//升級 半年到2年升級一次
5./usr/local/nginx/sbin/nginx -t
6.nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7.nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
8.kill -USR2 cat /usr/local/nginx/logs/nginx.pid
9.sleep 1
10.test -f /usr/local/nginx/logs/nginx.pid.oldbin
11.kill -QUIT cat /usr/local/nginx/logs/nginx.pid.oldbin
12.[root@svr5 ~]# /usr/local/nginx/sbin/nginx –v????????????????//查看版本
步驟三:客戶端訪問測試
1)分別使用瀏覽器和命令行工具curl測試服務器頁面
1.[root@client ~]# firefox http://192.168.4.5
2.[root@client ~]# curl http://192.168.4.5
2 案例2:用戶認證
2.1 問題
沿用練習一,通過調整Nginx服務端配置,實現以下目標:
1.訪問Web頁面需要進行用戶認證
2.用戶名為:tom,密碼為:123456
2.2 方案
通過Nginx實現Web頁面的認證,需要修改Nginx配置文件,在配置文件中添加auth語句實現用戶認證。最後使用htpasswd命令創建用戶及密碼即可。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:修改Nginx配置文件
全局配置【日誌,並發,用戶, 進程】 每個server是個虛擬主機
http{
Server {
Listen 80;
Server_name www.a.com;
Root html;
}
}
1)修改/usr/local/nginx/conf/nginx.conf 加兩行:
1.[root@pc205 ~]# vim /usr/local/nginx/conf/nginx.conf
2... ..
3.server {
- listen 80;
- server_name localhost;
- auth_basic "Input Password:";????????//認證提示符
- auth_basic_user_file"/usr/local/nginx/pass";????????//認證密碼文件 (要把這個文件創出來)
- location / {
- root html;
- index index.html index.htm;
- }
- }
2)生成密碼文件,創建用戶及密碼
使用htpasswd命令創建賬戶文件,需要確保系統中已經安裝了httpd-tools。
1.[root@svr5 ~]# yum -y install httpd-tools
2.[root@svr5 ~]# htpasswd -cm /usr/local/nginx/pass tom????????//創建密碼文件(加密的) 加用戶就不用再寫c了
【7版本默認自動加密不用寫-m(對密碼進行加密)】【-c 創建一個加密文件】
3.New password:
4.Re-type new password:
5.Adding password for user tom
6.[root@svr5 ~]# htpasswd -m /usr/local/nginx/pass jerry????
7.//追加用戶,不使用-c選項
8.New password:
9.Re-type new password:
10.Adding password for user jerry
3)重啟Nginx服務
1.[root@svr5 ~]# nginx –s reload????????
2.//請先確保nginx是啟動狀態才可以執行命令成功,否則報錯
3.報錯時檢查日誌tailf /usr/local/nginx/logs/access.log或tailf /usr/local/nginx/logs/error.log
步驟二:客戶端測試
1)登錄192.168.4.100客戶端主機進行測試
1.[root@client ~]# firefox http://192.168.4.5????????????????????//輸入密碼後可以訪問
虛擬主機:一個nginx 實現多個網站
基於域名,基於IP(listen 192.168.4.5 :80),基於端口
3 案例3:基於域名的虛擬主機
/etc/hosts 只能改變自己,自己解析域名。如果在真實情況下做網站需要搭建DNS和現有域名。破解軟件可以用到域名對應本地IP
ctrl v下鍵 x 刪#
3.1 問題
1.實現兩個基於域名的虛擬主機,域名分別為www.aa.com和www.bb.com
2.對域名為www.aa.com的站點進行用戶認證,用戶名稱為tom,密碼為123456
3.2 方案
修改Nginx配置文件,添加server容器實現虛擬主機功能;對於需要進行用戶認證的虛擬主機添加auth認證語句。
3.3 步驟
步驟一:修改配置文件
1)修改Nginx服務配置,添加相關虛擬主機配置如下 改幾個點:
1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2... ..
3.server {
- listen 80; ????????????????????????????????????//端口
- server_name www.aa.com;????????????????????????????//域名
6.auth_basic "Input Password:";????????????????????????//認證提示符 - auth_basic_user_file "/usr/local/nginx/pass";????????//認證密碼文件
8.location / { - root html;????????????????????????????????????//指定網站根路徑
- index index.html index.htm;
- }
-
13.}
14.… … - server {
- listen 80;????????????????????????????????????????//端口(基於端口就改端口)1-1024端口是預留端口,輕易不用,要用1025-65535端口。
- server_name www.bb.com;????????????????????????????//域名 (基於域名就改servername)(基於IP就在域名前面加IP:)
18.location / {
19.root www; ????????????????????????????????//指定網站根路徑
20.index index.html index.htm;
21.}
22.}
2)創建賬戶及密碼 和上個案例一樣的流程。可忽略。
1.[root@svr5 ~]# htpasswd –cm /usr/local/nginx/pass tom????????//創建賬戶密碼文件
2.New password:
3.Re-type new password:
4.Adding password for user tom
3)創建網站根目錄及對應首頁文件
1.[root@svr5 ~]# mkdir /usr/local/nginx/www
2.[root@svr5 ~]# echo "www" > /usr/local/nginx/www/index.html
4)重啟nginx服務
1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload
步驟二:客戶端測試 客戶端需要在/etc/hosts添加域名和訪問地址
1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
1.[root@client ~]# vim /etc/hosts
2.添加一行192.168.4.5????www.aa.com www.bb.com
2)登錄192.168.4.100客戶端主機進行測試
註意:SSH –X遠程連接調用虛擬機的firefox時,請先關閉真實機的firefox。
1.[root@client ~]# firefox http://www.aa.com????????????//輸入密碼後可以訪問
2.[root@client ~]# firefox http://www.bb.com????????????//直接訪問
4 案例4:SSL虛擬主機
用戶認證【http協議明文協議】
https【s是加密】
加密算法:
對稱密鑰:適用於單機加密(加密解密用同一把鑰匙)AES,DES
非對稱密鑰:適用於網絡加密(加密解密不同,公私)RSA,DSA
信息摘要:數據安全 md5(已被破解) sha128 sha256
Md5sum 文件名 所有帶碼的都會被刪
Key 私鑰(解密)
Pem 公鑰(加密)
md5sum 文件名 加密,只改名字不會改碼,修改內容會改碼。可以查看攻擊者修改了哪個文件,數據安全:查看md5校驗:
for i in ls -r /var/www/html/
do
md5sum $i >> data2.log
done
企業裏不要用破解、漢化的東西。
4.1 問題
沿用練習二,配置基於加密網站的虛擬主機,實現以下目標:
1.域名為www.cc.com
2.該站點通過https訪問
3.通過私鑰、證書對該站點所有數據加密
4.2 方案
源碼安裝Nginx時必須使用--with-http_ssl_module參數,啟用加密模塊,對於需要進行SSL加密處理的站點添加ssl相關指令(設置網站需要的私鑰和證書)。
4.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:配置SSL虛擬主機
1)生成私鑰與證書
1.[root@svr5 ~]# cd /usr/local/nginx/conf (存到nginx/conf下)
2.[root@svr5 ~]# openssl genrsa > (另存,導出) cert.key???(名字)?????????????????????????//生成私鑰(rsa 是密鑰)
3.[root@svr5 ~]# openssl req -new -x509 -key cert.key -out cert.pem ????//生成證書(公鑰)
2)修改Nginx配置文件,設置加密網站的虛擬主機 改1行去掉註釋
1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2.… …????
3.server {
- listen 443 ssl;
- server_name www.cc.com;
- ssl_certificate cert.pem;
- ssl_certificate_key cert.key;
- ssl_session_cache shared:SSL:1m;
- ssl_session_timeout 5m;
- ssl_ciphers HIGH:!aNULL:!MD5;
- ssl_prefer_server_ciphers on;
- location / {
- root html;
- index index.html index.htm;
- }
- }
步驟二:客戶端驗證
修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
[root@client ~]# vim /etc/hosts
192.168.4.5????www.cc.com www.aa.com www.bb.com
登錄192.168.4.100客戶端主機進行測試
[root@client ~]# firefox https://www.cc.com????????????//信任證書後可以訪問
添加例外(隱私與安全)客戶端沒有證書時可以使用,信任證書
證書:
1.自己做,默認瀏覽器不信任,手動導入,做插件(私網)
2.權威CA證書機構,找別人,需要費用(大眾公開網)
5 案例4:Nginx反向代理
Client proxy web1
Web2 負載均衡,健康檢查, poroxy沒有單點是公司最基本要求
5.1 問題
使用Nginx實現Web反向代理功能,實現如下功能:
?後端Web服務器兩臺,可以使用httpd實現
?Nginx采用輪詢的方式調用後端Web服務器
?兩臺Web服務器的權重要求設置為不同的值
?最大失敗次數為1,失敗超時時間為30秒
5.2 方案
使用4臺RHEL7虛擬機,其中一臺作為Nginx代理服務器,該服務器需要配置兩塊網卡,IP地址分別為192.168.4.5和192.168.2.5,兩臺Web服務器IP地址分別為192.168.2.100和192.168.2.200。客戶端測試主機IP地址為192.168.4.100。如圖-2所示。
圖-2
5.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:部署實施後端Web服務器
1)部署後端Web1服務器
後端Web服務器可以簡單使用yum方式安裝httpd實現Web服務,為了可以看出後端服務器的不同,可以將兩臺後端服務器的首頁文檔內容設置為不同的內容。
1.[root@web1 ~]# yum -y install httpd
2.[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html
3.[root@web1 ~]# systemctl restart httpd
2)部署後端Web2服務器
1.[root@web2 ~]# yum -y install httpd
2.[root@web2 ~]# echo "192.168.2.200" > /var/www/html/index.html
3.[root@web2 ~]# systemctl restart httpd
步驟二:配置Nginx服務器,添加服務器池,實現反向代理功能
添加 upstream abc{
server 192.168.2.100;
server 192.168.2.200;
} 定義服務器集群
server {
listen 80;
調用集群: server_name localhost;
location / {
proxy_pass http://abc (集群名) 自己轉發集群
可以發現web的健康問題
1)修改/usr/local/nginx/conf/nginx.conf配置文件
weight加權重(使用的頻率)
max_fail proxy查找web最大失敗幾次算失敗
Fail_timeout:10秒超時時間 10秒後不找這個web了。每10秒測一次看web還在不在
web壞掉可以人為加註釋或者最後加down可以關閉此web,修好後可以刪掉down
Ip_hash 相同客戶端訪問相同web服務器 (不用換web服務器而重新輸入密碼)
步驟二:配置upstream服務器集群池屬性
1)設置失敗次數,超時時間,權重
1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2... ..
3.http {
4... ..
5.upstream webserver {
- server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
- server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
- }
9... ..
10.server { - listen????????80;
- server_name www.tarena.com;
- location / {
- proxy_pass http://webserver;
- }
16.}
2)重啟nginx服務
1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload
3)使用瀏覽器訪問代理服務器測試輪詢效果
1.[root@client ~]# curl http://192.168.4.5????????????//使用該命令多次訪問查看效果
4)設置相同客戶端訪問相同Web服務器
1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2... ..
3.http {
4... ..
5.upstream webserver {
6.???????????????? ip_hash; 算法(默認算法是輪詢) - server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
- server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
- }
10... ..
11.server { - listen????????80;
- server_name www.tarena.com;
- location / {
- proxy_pass http://webserver;
- }
17.}
5)重啟nginx服務
1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload
6)使用瀏覽器訪問代理服務器測試輪詢效果
1.[root@client ~]# curl http://192.168.4.5????????????//使用該命令多次訪問查看效果
(會一直出現同一地址,即權重大的那個)
Nginx配置文件和目錄
/usr/local/nginx/ 安裝目錄
Conf/nginx.conf 主配置文件
Logs 日誌文件
Sbin/nginx 啟動腳本
Sbin/nginx -c conf/nginx.conf 啟動Nginx服務
選項:-v 查看nginx版本
-V 查看編譯參數(什麽都能看)
-t 測試默認配置文件
-c 指定配置文件
php、python: apache Nginx Lighttpd
Java: Tomcat IBM Websphere Jboss
Nginx服務器、Nginx虛擬主機、Nginx反向代理