1. 程式人生 > >Nginx服務器、Nginx虛擬主機、Nginx反向代理

Nginx服務器、Nginx虛擬主機、Nginx反向代理

服務器ip 參數 dbi 調用 密碼文件 nginx安裝 killall 開啟 基於ip

nginx安裝【依賴包,./configure模塊】
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加密功能

?user:指定賬戶
?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,擴大功能
6.> --prefix=/usr/local/nginx \????????????????//指定安裝路徑
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 所帶的功能】

  1. .. ..
    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 {

  1. listen 80;
  2. server_name localhost;
  3. auth_basic "Input Password:";????????//認證提示符
  4. auth_basic_user_file"/usr/local/nginx/pass";????????//認證密碼文件 (要把這個文件創出來)
  5. location / {
  6. root html;
  7. index index.html index.htm;
  8. }
  9. }
    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 {

  1. listen 80; ????????????????????????????????????//端口
  2. server_name www.aa.com;????????????????????????????//域名
    6.auth_basic "Input Password:";????????????????????????//認證提示符
  3. auth_basic_user_file "/usr/local/nginx/pass";????????//認證密碼文件
    8.location / {
  4. root html;????????????????????????????????????//指定網站根路徑
  5. index index.html index.htm;
  6. }
  7. 13.}
    14.… …

  8. server {
  9. listen 80;????????????????????????????????????????//端口(基於端口就改端口)1-1024端口是預留端口,輕易不用,要用1025-65535端口。
  10. 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 {

  1. listen 443 ssl;
  2. server_name www.cc.com;
  3. ssl_certificate cert.pem;
  4. ssl_certificate_key cert.key;
  5. ssl_session_cache shared:SSL:1m;
  6. ssl_session_timeout 5m;
  7. ssl_ciphers HIGH:!aNULL:!MD5;
  8. ssl_prefer_server_ciphers on;
  9. location / {
  10. root html;
  11. index index.html index.htm;
  12. }
  13. }
    步驟二:客戶端驗證
    修改客戶端主機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 {

  1. server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
  2. server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
  3. }
    9... ..
    10.server {
  4. listen????????80;
  5. server_name www.tarena.com;
  6. location / {
  7. proxy_pass http://webserver;
  8. }
    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; 算法(默認算法是輪詢)
  9. server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
  10. server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
  11. }
    10... ..
    11.server {
  12. listen????????80;
  13. server_name www.tarena.com;
  14. location / {
  15. proxy_pass http://webserver;
  16. }
    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反向代理