項目實戰1—LNMP的搭建、nginx反向代理和緩存等的實現

来源:http://www.cnblogs.com/along21/archive/2017/11/12/7822228.html
-Advertisement-
Play Games

實戰一:搭建lnmp及類小米等商業網站的實現 環境:關閉防火牆,selinux 1、安裝包,開啟服務 yum -y install nginx mariadb-server php-fpm php-mysql systemctl start nginx systemctl start mariadb ...


 

實戰一:搭建lnmp及類小米等商業網站的實現

環境:關閉防火牆,selinux

 

1、安裝包,開啟服務

yum -y install nginx mariadb-server php-fpm php-mysql

systemctl start nginx

systemctl start mariadb

systemctl start php-fpm

 

2、修改nginx的配置文件

(1)cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf 有個模板例子覆蓋了配置文件

vim /etc/nginx/nginx.conf 修改下麵幾類

① user nobody; 使用用戶
error_log /var/log/nginx/error.log info; 錯誤日誌


② events {
① user nobody; 使用用戶
  error_log /var/log/nginx/error.log info; 錯誤日誌


② events {
  worker_connections 65535;
}


③ tcp_nopush on; tcp優化
tcp_nodelay on;
gzip on;


④ server {
listen 80;
server_name xiaomi.along.com; 根據自己順便寫
root /data/web; 主站點的目錄根
  location / {
    index index.php index.html index.htm;
  }


⑤ location ~ \.php$ { 開啟.php,配置文件有例子,只需去掉註釋,修改一行即可
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

 

 

(2)修改完,可以nginx -t 查看

systemctl restart nginx 重啟服務,發現有warn

 

(3)ulimit -n 查看linux系統里打開文件描述符的最大值,一般預設值是1024,對一臺繁忙的伺服器來說,這個值偏小,所以有必要重新設置linux系統里打開文件描述符的最大值

ulimit -n 65535 修改內核參數

 

3、修改php-fpm的配置文件

① vim /etc/php.ini 改兩行

date.timezone = Asia/Shanghai 時區

short_open_tag = On 允許短標簽

 

vim /etc/php-fpm.d/www.conf 改兩行

user = nobody

group = nobody

 

systemctl restart php-fpm

 

4、運行mysql ,創建一會網頁需要的庫

create database xiaomi;

 

5、把事先找好的小米網站傳進來 rz

小米網站的源碼資源我已經上傳到網盤了http://pan.baidu.com/s/1kUUFp6B ,需要的私密我

mkdir /data/web -p 創建一個目錄專門放小米的網頁配置

unzip -d /data/web/ xiaomi.zip 解壓到目錄

cd /data/web/

chown -R nobody.nobody * 為了安全,遞歸把所有文件的所屬人和所屬組改為許可權有限的nobody

 

6、網頁登錄

① 用戶:admin

密碼:123456

② 參數設置:就是連接上自己的資料庫

也可以在命令行連上自己的資料庫:

vim /data/web/data/config.php

③ 把數據寫到資料庫中,恢複數據

 

7、實驗成功,登錄查看

後臺登錄,可以自己隨便修改

http://192.168.30.107/admin

 

8、ab 可以壓力測試

ab -c 100 -n 1000  http://192.168.30.107/

 

實驗二:實現ssl 加密

(1)一個物理伺服器設置一個https

1、創建存放證書的目錄

mkdir /etc/nginx/ssl

 

2、自簽名證書

cd /etc/pki/tls/certs/

make nginx.crt

openssl rsa -in nginx.key -out nginx2.key 因為剛私鑰被加密了,為了後邊方便,解密

 

3、把證書和私鑰cp 到nginx存放證書目錄

cp nginx.crt nginx2.key /etc/nginx/ssl/

cd /etc/nginx/ssl/

mv nginx2.key nginx.key 把名字改回來

 

4、修改配置文件,加一段server

server {
   listen 443 ssl;
   server_name www.along.com;
   ssl on;
   ssl_certificate /etc/nginx/ssl/nginx.crt;
   ssl_certificate_key /etc/nginx/ssl/nginx.key;
   ssl_session_cache shared:sslcache:20m;
   ssl_session_timeout 10m;
 }

 

 

5、測試,網頁打開 https://192.168.30.7/

windows 信任證書

 

(2)因為nginx 強大,可以實現多個虛擬主機基於不同的FQDN 實現ssl加密,httpd不能實現

一個物理伺服器設置多個https

1、生成3個證書和私鑰

make nginx.crt

make nginx2.crt

make nginx3.crt

 

2、把證書和私鑰cp 到nginx存放證書目錄,並解開私鑰的加密

cp nginx{1,2,3}* /etc/nginx/ssl/

openssl rsa -in nginx.key -out nginx.key

openssl rsa -in nginx2.key -out nginx2.key

openssl rsa -in nginx3.key -out nginx3.key

 

3、創建各自對應的訪問網頁

mkdir /app/website{1,2,3}

echo website1 > /app/website1/index.html

echo website1 > /app/website2/index.html

echo website1 > /app/website3/index.html

 

4、測試訪問,成功

 

實戰三:實現身份驗證

1、生成密碼賬戶文件

cd /etc/nginx/conf.d

htpasswd -c -m .htpasswd http1

htpasswd -m .htpasswd http2

 

2、在配置文件中修改

vim /etc/nginx/nginx.conf 在location段中指向賬戶密碼文件

location /images {

  auth_basic "images site"; "提示字"

  auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

}

 

3、網頁查看驗證 http://172.17.22.22/images/loading.gif

 

實驗四:實現反向代理負載均衡且動靜分離

1、環境準備:

機器名稱

IP配置

服務角色

備註

nginx

VIP:172.17.11.11

  

反向代理伺服器

開啟代理功能

設置監控,調度

rs01

RIP:172.17.22.22

後端伺服器

stasic-srv 組

rs02

RIP:172.17.1.7

後端伺服器

stasic-srv 組

rs01

RIP:172.17.77.77

後端伺服器

defautl-srv 組

rs02

RIP:172.17.252.111

後端伺服器

defautl-srv 組

 

2、下載編譯安裝tengine

原因:nginx自帶的監控模式雖然能用,但是很不易理解;tengine的監控模式易設簡單,且是在nginx的二次開發,和nginx差不多

(1)官網下載:http://tengine.taobao.org 還支持中文

解包 tar tengine-2.1.1.tar.gz

cd tengine-2.1.1

(2)下載所依賴的包

yum -y groupinstall "development tools"

yum install openssl-devel -y

yum install pcre-devel -y

 

(3)編譯安裝

./configure --prefix=/usr/local/tengine 指定安裝後的目錄

make && make install

 

3、設置代理伺服器的配置文件

cd /usr/local/tengine/conf

cp nginx.conf /usr/local/tengine/conf/ 若機器上本有nginx,可以把配置文件直接拷過來,沒有也可自己設置

vim nginx.conf 全局段和 http段我就不設置了,預設就好

① 定義upstream:後端server 群

upstream lnmp-srv1 {
        server 172.17.22.22:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}
upstream lnmp-srv2 {
        server 172.17.77.77:80;
        server 172.17.252.111:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}

 

 

② 在server段的location 段中設置動靜分離

server {
   listen 80;
   location /stats { #設置監聽頁面
   check_status;
 }

    location ~* .jpg|.png|.gif|.jpeg$ {
      proxy_pass http://static-srv;
   }
    location ~* .css|.js|.html|.xml$ {
      proxy_pass http://static-srv;
   }
   location / {
     proxy_pass http://default-srv;
   }
}

 

 

4、啟動tengine服務

cd /usr/local/tengine/sbin/

./nginx 啟動tengine

./nginx -s stop 停止

 

5、開啟後端的web服務

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

 

6、測試

(1)測試反向代理是否成功 http://172.17.11.11/ web頁面訪問成功

(2)測試狀態頁面 http://172.17.11.11/stats

 

(3)測試動靜分離

把靜態頁面的後端server組的服務宕機,發現沒有靜態的東西了

 

 

實驗五:nginx實現緩存功能

需求分析:為什麼需要緩存?

緩存的最根本的目的是為了提高網站性能, 減輕頻繁訪問數據 , 而給資料庫帶來的壓力 。 合理的緩存 , 還會減輕程式運算時 , 對CPU 帶來的壓力。在電腦現代結構中, 操作記憶體中的數據比操作存放在硬碟上的數據是要快N 個數量級的 , 操作簡單的文本結構的數據 , 比操作資料庫中的數據快N 個數量級 。

例如: 每次用戶訪問網站, 都必須從資料庫讀取網站的標題, 每讀一次需要15 毫秒的時間, 如果有100 個用戶( 先不考慮同一時間訪問), 每小時訪問10 次, 那麼就需要讀取資料庫1000 次, 需要時間15000 毫秒. 如果把頁面直接變成頁面緩存,則每次訪問就不需要去資料庫讀取,大大提升了網站性能。

 

1、環境準備:同上實驗,實驗結構圖如下:

 

2、設置代理伺服器的配置文件

① 先在http段定義緩存

proxy_cache_path /data/cache levels=1:2:2 keys_zone=proxycache:10m inactive=120s max_size=1g

分析:定義一個緩存,路徑在/data/cache 下;三級目錄,第一級[0-f]隨機數字,第二、三級[00-ff]隨機數字;定義緩存的名字proxycache,緩存大小10M;存活時間120s;在磁碟占用空間最大1G。

 

② 再在server段引用緩存

proxy_cache proxycache; # 引用上面定義上的緩存空間,同一緩存空間可以在幾個地方使
用
proxy_cache_key $request_uri; #對uri做hash運算
proxy_cache_valid 200 302 301 1h; #200302、301響應碼的響應內容的緩存1小時
proxy_cache_valid any 1m; #其它緩存1分
add_header Along-Cache "$upstream_cache_status form $server_addr"; # 給請求響應增加一個頭部信息,表示從伺服器上返回的cache

 

3、測試:訪問 http://172.17.11.11/ ,F12調試模式下,看到自己設置的特定頭部存在

緩存目錄也生成了緩存

 


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

-Advertisement-
Play Games
更多相關文章
  • 安裝Flask-Migrate插件 註意到虛擬環境中(因為Flask環境就安裝在虛擬環境中) 安裝flask-script使python支持命令行操作 創建manage.py文件 初始化 創建遷移腳本 更新資料庫 第一次遷移實際上相當於調用db.create_all(),但在後續遷移中,upgrad ...
  • 1 例子jar位置 2 生成數據文件 3 創建HDFS目錄 4 將數據文件word.txt上傳以HDFS /work/data/input目錄下 5 運行wordcount例子 6 查看結果 ...
  • 第1章 部署LNMP架構步驟 1.1 ①部署Linux系統(OK) 基本優化完成(ip地址設置 yum源更新 字元集設置) 安全優化完成(iptables關閉 selinux關閉 /tmp/ 1777) 1.2 ②部署nginx網站服務 A.安裝軟體依賴包 B.創建進程管理用戶 C.下載nginx軟 ...
  • 1.DNS服務的簡介: DNS( D omain N ame S erver,功能變數名稱伺服器)是進行功能變數名稱(domain name)和與之相對應的IP地址 (IP address)轉換的伺服器。DNS中保存了一張功能變數名稱(domain name)和與之相對應的IP地址 (IP address)的表,以解析消息 ...
  • #數學相關的函數 #導入數學的模塊 import math #floor()向下取整 result = math.floor(6.2) print(result) #ceil()向上取整 result = math.ceil(5.5) print(result) #round()四捨五入 註意:不是... ...
  • 最近筆記本重覆了好幾次奇怪的現象,重啟後進入桌面,然後死機,木有藍屏。 後來在安全模式里查了事件,如下 日誌名稱: Application 來源: Microsoft-Windows-WMI 日期: 2017-11-11 22:08:41 事件 ID: 10 任務類別: 無 級別: 錯誤 關鍵字: ...
  • 一:虛擬機外面準備工作 1-安裝好的CentOS虛擬機 2-CentOS虛擬機網路模式為NAT 3-VM-編輯-虛擬網路編輯器設置如下 4-電腦-管理-服務裡面開啟VM中的NAT和DHCP服務 二:虛擬機內部設置 1-打開CentOS 2-命令:setup (接下來是圖形配置過程) 3-回到命令界 ...
  • tomcat相關實驗 1.實現LNT 同主機實現 1、安裝並啟動tomcat 2、安裝nginx並配置 2.實現LAT 同主機(靜態網頁) 1、安裝並啟動tomcat 2、安裝httpd服務並確保有ajp_module和http_module 3、與後端tomcat使用http協議連接時配置 4、與 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...