Nginx+lamp構建動靜分離項目

来源:https://www.cnblogs.com/omgasw/archive/2019/05/15/10871006.html
-Advertisement-
Play Games

一、nginx代理的概述 概述:nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個內部網路代理上網的代理伺服器,另外nginx可以作為反向代理進行負載均衡的實現。 二、nginx之正向代理 解析:在如今的 ...


一、nginx代理的概述

概述:nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個內部網路代理上網的代理伺服器,另外nginx可以作為反向代理進行負載均衡的實現。

二、nginx之正向代理

解析:在如今的網路環境下,我們如果由於技術需要要去訪問國外的某些網站,此時你會發現位於國外的某網站我們通過瀏覽器是沒有辦法訪問的,此時大家可能都會用一個操作FQ進行訪問,FQ的方式主要是找到一個可以訪問國外網站的代理伺服器,我們將請求發送給代理伺服器,代理伺服器去訪問國外的網站,然後將訪問到的數據傳遞給我們!上述這樣的代理模式稱為正向代理,正向代理最大的特點是客戶端非常明確要訪問的伺服器地址;伺服器只清楚請求來自哪個代理伺服器,而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。

三、nginx之反向代理

第一層:client,客戶端層,發出http請求的單位;

第二層:反向代理層,agent層,負責將client客戶端的請求,代理轉發到第三層(real server)真實的伺服器的節點,並且保證real server節點不暴露在client前;

第三層:real server,伺服器層,真實負責處理cleint客戶端的請求,通常在此為多台伺服器構成,形成負載均衡之效果;

四、nginx之負載均衡

概述:nginx扮演了反向代理伺服器的角色,它是以依據什麼樣的規則進行請求分發的呢?不用的項目應用場景,分發的規則是否可以控制呢?

實現方式:

硬體負載均衡:也稱為硬負載,如F5負載均衡,相對造價昂貴成本較高,但是數據的穩定性安全性等等有非常好的保障,如中國移動中國聯通這樣的公司才會選擇硬負載進行操作;

軟體負載均衡:更多的公司考慮到成本原因,會選擇使用軟體負載均衡,軟體負載均衡是利用現有的技術結合主機硬體實現的一種消息隊列分發機制;

nginx的負載均衡演算法:

1.weight輪詢(預設):接收到的請求按照順序逐一分配到不同的後端伺服器。這種方式下,可以給不同的後端伺服器設置一個權重值(weight),用於調整不同的伺服器上請求的分配率;權重數據越大,被分配到請求的幾率越大;

2.ip_hash:每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的演算法下一個固定ip地址的客戶端總會訪問到同一個後端伺服器,這也在一定程度上解決了集群部署環境下session共用的問題;

3.fair:智能調整調度演算法,動態的根據後端伺服器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的伺服器分配到請求的概率高,響應時間長處理效率低的伺服器分配到的請求少;結合了前兩者的優點的一種調度演算法。但是需要註意的是nginx預設不支持fair演算法,如果要使用這種調度演算法,請安裝upstream_fair模塊;

4.url_hash:按照訪問的url的hash結果分配請求,每個請求的url會指向後端固定的某個伺服器,可以在nginx作為靜態伺服器的情況下提高緩存效率。同樣要註意nginx預設不支持這種調度演算法,要使用的話需要安裝nginx的hash軟體包;

五、案例:結合nginx反向代理構建nginx+lamp實現動靜頁面分離以及php伺服器的負載均衡

案例拓撲:

案例環境:

系統類型

IP地址

主機名

記憶體

所需軟體

Centos 7.4 1708 64bit

192.168.100.101

www.linuxfan.cn

1G

nginx-1.12.2.tar.gz

Centos 6.5 64bit

192.168.100.150

real1.linuxfan.cn

1G

httpd-2.2.17.tar.gz、

cmake-2.8.6.tar.gz、

mysql-5.5.22.tar.gz、

libmcrypt-2.5.8.tar.gz、

mcrypt-2.6.8.tar.gz、

mhash-0.9.9.9.tar.gz、

php-5.3.28.tar.gz、

ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz

Centos 6.5 64bit

192.168.100.151

real2.linuxfan.cn

1G

httpd-2.2.17.tar.gz、

cmake-2.8.6.tar.gz、

mysql-5.5.22.tar.gz、

libmcrypt-2.5.8.tar.gz、

mcrypt-2.6.8.tar.gz、

mhash-0.9.9.9.tar.gz、

php-5.3.28.tar.gz、

ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

案例步驟:

  • 部署real1.linuxfan.cn節點的lamp服務
  • 部署real2.linuxfan.cn節點的lamp服務
  • 安裝www.linuxfan.cn節點的nginx服務
  • 配置nginx節點的反向代理服務
  • 客戶端訪問測試代理集群
  • 查看日誌分析訪問情況

部署real1.linuxfan.cn節點的lamp服務

[root@real1 ~]# ls
lamp_install_publis-app-2015-07-16.tar.xz
[root@real1 ~]# tar Jxvf lamp_install_publis-app-2015-07-16.tar.xz
[root@real1 ~]# cd bin/
[root@real1 bin]#./apache_install.sh &&./mysql_install.sh &&./mysql_config.sh &&./php_install.sh &&./php_config.sh &&./lamp_config.sh
[root@real1 bin]# cd
[root@real1 ~]# netstat -utpln |grep 80
tcp        0      0 :::80                       :::*                        LISTEN      50971/httpd         
[root@real1 ~]# netstat -utpln |grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6693/mysqld
[root@real1 ~]# rm -rf /usr/local/httpd/htdocs/index.html
[root@real1 ~]# vi /usr/local/httpd/htdocs/index.php
<?php
session_start();
$_SESSION['time'] =date("Y:m:d:H:s",time());
echo "本次訪問時間"."<font color=red>".$_SESSION['time']."</font>"."<br>";
echo "訪問的伺服器地址是"."<font color=red>".$_SERVER['SERVER_ADDR']."</font>"."<br>";
echo "訪問的伺服器功能變數名稱是"."<font color=red>".$_SERVER['SERVER_NAME']."</font>"."<br>";
echo "SESSIONNAME是"."<font color=red>".session_name()."</font>"."<br>";
echo "SESSIONID是"."<font color=red>".session_id()."</font>"."<br>";
?>

客戶端訪問測試:

部署real2.linuxfan.cn節點的lamp服務

[root@real2 ~]# ls
lamp_install_publis-app-2015-07-16.tar.xz
[root@real2 ~]# tar Jxvf lamp_install_publis-app-2015-07-16.tar.xz
[root@real2 ~]# cd bin/
[root@real2 bin]#./apache_install.sh &&./mysql_install.sh &&./mysql_config.sh &&./php_install.sh &&./php_config.sh &&./lamp_config.sh
[root@real2 bin]# cd
[root@real2 ~]# netstat -utpln |grep 80
tcp        0      0 :::80                       :::*                        LISTEN      50971/httpd         
[root@real2 ~]# netstat -utpln |grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6693/mysqld
[root@real2 ~]# rm -rf /usr/local/httpd/htdocs/index.html
[root@real2 ~]# vi /usr/local/httpd/htdocs/index.php
<?php
session_start();
$_SESSION['time'] =date("Y:m:d:H:s",time());
echo "本次訪問時間"."<font color=red>".$_SESSION['time']."</font>"."<br>";
echo "訪問的伺服器地址是"."<font color=red>".$_SERVER['SERVER_ADDR']."</font>"."<br>";
echo "訪問的伺服器功能變數名稱是"."<font color=red>".$_SERVER['SERVER_NAME']."</font>"."<br>";
echo "SESSIONNAME是"."<font color=red>".session_name()."</font>"."<br>";
echo "SESSIONID是"."<font color=red>".session_id()."</font>"."<br>";
?>

客戶端訪問測試:

安裝www.linuxfan.cn節點的nginx服務

[root@www ~]# hostnamectl set-hostname www.linuxfan.cn
[root@www ~]# hostname
www.linuxfan.cn
[root@www ~]# yum -y install pcre-devel zlib-devel
[root@www ~]# useradd -M -s /sbin/nologin nginx
[root@www ~]# tar zxvf nginx-1.12.2.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/nginx-1.12.2/
[root@www nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@www nginx-1.12.2]# make && make install
[root@www nginx-1.12.2]# cd
[root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@www ~]# vi  /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginxapi
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid)
ExecStop=kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid)
PrivateTmp=Flase

[Install]
WantedBy=multi-user.target
[root@www ~]# systemctl start nginx
[root@www ~]# systemctl enable nginx
[root@www ~]# netstat -utpln |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3538/nginx: master

客戶端訪問測試:

配置nginx節點的反向代理服務

[root@www ~]# vi /usr/local/nginx/conf/nginx.conf
     34 upstream lamp_server {                    ##在http區域內,server區域上
     35         server 192.168.100.150:80 weight=1;
     36         server 192.168.100.151:80 weight=1;
     37      }
     47         location / {
     48             root   html;
     49             index  index.html index.htm;
     50         }
     51         location ~ \.(asp|aspx|php|jsp|do)$ {            ##在server區域內添加
     52             proxy_pass      http://lamp_server;
     53         }
[root@www ~]# systemctl stop nginx
[root@www ~]# systemctl start nginx

客戶端訪問測試代理集群

客戶端訪問測試html站點:

客戶端訪問測試php站點:

查看日誌分析訪問情況

[root@www ~]# tail -3 /usr/local/nginx/logs/access.log 
192.168.100.1 - - [16/Jul/2018:17:01:34 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.100.1 - - [16/Jul/2018:17:02:02 +0800] "GET /index.php HTTP/1.1" 200 797 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.100.1 - - [16/Jul/2018:17:02:11 +0800] "GET /index.php HTTP/1.1" 200 797 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"

[root@real1 ~]# tail -3 /usr/local/httpd/logs/access_log 
192.168.100.102 - - [16/Jul/2018:17:07:55 +0800] "GET /index.php HTTP/1.0" 200 797
192.168.100.102 - - [16/Jul/2018:17:07:56 +0800] "GET /index.php HTTP/1.0" 200 797
192.168.100.102 - - [16/Jul/2018:17:09:03 +0800] "GET /index.php HTTP/1.0" 200 797

[root@real2 ~]# tail -3 /usr/local/httpd/logs/access_log 
192.168.100.102 - - [16/Jul/2018:17:07:56 +0800] "GET /index.php HTTP/1.0" 200 797
192.168.100.102 - - [16/Jul/2018:17:07:56 +0800] "GET /index.php HTTP/1.0" 200 797
192.168.100.102 - - [16/Jul/2018:17:09:12 +0800] "GET /index.php HTTP/1.0" 200 797

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Centos安裝PHP時,安裝php依賴包時yum install libmcrypt libmcrypt-devel,報錯如下: 然後編譯的時候,又報錯: 解決方法:yum install epel-release //擴展包更新包 ...
  • @ "TOC" 常見的運算符 |環境變數|說明| |: :|: :| |+|加 | |減 |\ |乘 |/|除 |%|取模 因為Shell中將 作為通配符使用, expr命令 expr命令可以對 整數 進行算術運算,在算術表達式中如果出現變數,必須在變數前加$,並且要在運算符和變數之間要加空格 若要 ...
  • @ "TOC" shell編程的建立 就建立了一個名叫mytest的文件 vim編輯器沒有接觸過,你就需要學習一下啊,這裡介紹幾個簡單的命令: 單點I進入插入模式 Ctrl+c退出插入模式 在瀏覽模式按下“:”,再輸入q是不保存退出、wq是保存並退出 shell的hello world! 執行腳本的 ...
  • 回到目錄 二級管作為一種非線性器件,電阻值是不固定的,在不同的工作點有不同的電阻值,下麵我們分別討論二極體的直流電阻和交流電阻。 1. 直流電阻 直流電阻(DC resistance)也叫靜態電阻(static resistance),概念比較簡單,就是根據歐姆定律,將二極體兩端的電壓除以流過二極體 ...
  • 反向代理是一個伺服器,它接收通過Web發出的請求,即http和https,然後將它們發送到後端伺服器(或伺服器)。後端伺服器可以是單個或一組應用伺服器 ,如Tomcat,wildfly或Jenkins等,或者甚至可以是其他Web伺服器,如Apache等。 我們已經討論過如何使用Nginx配置簡單的h ...
  • 環境; centos 7 192.168.10.10 master centos 7 192.168.10.129 minion 1、為了方便關閉防火牆 2、在192.168.10.10主機上安裝salt-master salt-master預設監聽2個埠: 4505:publish_port 提 ...
  • 本文是在ubuntu環境下安裝jenkins,jenkins運行在docker容器中,至於docker如何安裝,本文不再描述,大家可以上網查詢下,如何安裝docker,下麵先放上一個使用jenkins自動部署原理圖片(圖片是網上找的,感謝原創分享) 下麵介紹安裝jenkins步驟: 使用下麵的命令拉 ...
  • 在別人電腦已登錄Windows的情況下: 打開控制面板 -> 管理工具 -> 電腦管理 或者 對Win圖標單擊右鍵 -> 電腦管理 -> 本地用戶和組 -> 用戶 我們可以操作用戶組的所以成員,包括Administrator、Guest、當前的用戶賬號。 對某個賬號單擊右鍵 -> 設置密碼 -> ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...