web架構4------(nginx常用變量,nginx中英文自動匹配,lnmp網站架構,正向代理,反向代理,負載均衡)

一.前言

本期來介紹nginx最后幾個知識點,看著要說的內容很多,其實一點也不多,都是所見即所得的東西。

二.nginx常用變量

2.1 常用變量?

$args 請求中的參數,也叫查詢參數,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2,?

$content_length HTTP響應信息里的"Content-Length"

$content_type HTTP響應信息里的"Content-Type",文本文件在瀏覽上是可以直接預覽 的,就是可以直接打開

$document_root nginx虛擬主機配置文件中的root站點根目錄$document_uri 當前請求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的

$document_uri就是/1.php,不包含后面的參數

$host 主機頭,也就是域名或者ip地址

$http_user_agent 客戶端的詳細信息,也就是瀏覽器的標識,用curl -A可以指定,比如:curl -A 'jaden/666.0' 192.168.61.139

$http_cookie 客戶端的cookie信息

$limit_rate 如果nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,如果沒 有設置, 則顯示0

$remote_addr 客戶端的公網ip

$remote_port 客戶端的port

$remote_user 如果nginx有配置認證,該變量代表客戶端認證的用戶名

$request_body_file 做反向代理時發給后端服務器的本地資源的名稱

$request_method http請求方法,GET/POST/PUT/DELETE等

$request_filename 當前請求的資源文件的路徑名稱,相當于$document_root/$document_uri的組合

$request_uri 請求的鏈接,包括$document_uri和$args

$scheme 請求的協議,如ftp,http,https

$server_protocol 客戶端請求資源使用的協議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等$server_addr 服務器IP地址

$server_name 服務器的主機名

$server_port 服務器的端口號

$uri 和$document_uri相同

$http_referer 客戶端請求時的referer請求頭鍵值對的值,通俗講就是該請求是通過哪個 鏈接跳過來的,用curl -e可以指定

2.2?Nginx防盜鏈?

referer的使用場景

百度搜索--點擊某個網站--收費

盜鏈:你自己網站視頻下載地址,被別人放到他的網站上了,別人從他網站上點擊你的下載鏈接,下載動作和 流量走的是你的服務器,他收獲了人氣,你損失了流量。通過referer請求頭就可以防盜鏈。只要下載請求數 據中的referer值不是你自己網站的網址,那就不讓下載。

?# 修改b網站的index.html文件:

root@web01 web]# cd two/

[root@web01 two]# ls

ceshi games icon index index0 index1 index2 index3 index4 index5 index.html youxi youxi.tar.gz

[root@web01 two]# vim index.html

# 添加如下內容:

<img src='http://a.xxx.com/images/logo.png'>

a網站防盜鏈

?[root@web01 conf.d]# ls

a.xxx.com.conf b.xxx.com.conf c.xxx.com.conf www.xxx.top.conf

[root@web01 conf.d]# vim a.xxx.com.conf

# 加上如下內容

????????location ~* \.png$ {

???????????????? if ( $http_referer !~* "a.xxx.com" ) { #!~* 不包含的意思

????????????????????????return 403;

????????????????}

???????? }

# 并且將location中的站點根目錄放到全局來

????????server {

????????????????listen ????????80;

????????????????server_name a.xxx.com;

????????????????access_log /opt/nginx/a.xxx.com_log xxx;

????????????????# 站點根目錄設置到location外面,表示所有的location的站點根目錄都指向/web/one

????????????????root /web/one;

????????????????index index.html index.htm; location / {

????????????????#...

????????????????#root /web/one;

????????????????#index index.html index.htm;

????????}

???????? location ~* \.png$ {

????????????????if ( $http_referer !~* "a.xxx.com" ) {

????????????????????????return 403;

????????????????}

????????}

}

重點變量:

host #http請求頭的host域名

referer #從哪一個url跳轉過來的

user_agent #用戶的瀏覽器客戶端信息

Connection #是否為長鏈接

remote_addr #客戶端的

ip status #http的狀態碼?

三.nginx 中英文自動匹配?

這個示例我們再做一個域名,比如yuyan.com。

?# mkdir -p /html/lang/en

# mkdir -p /html/lang/cn

# cd /html/lang/en

# vim index.html # 寫點英文

# cd /html/lang/cn # vim index.html # 寫點漢字

# hosts文件中加入yuyan.com

server {

????????listen 80;

????????server_name yuyan.com;

????????index index.htm index.html;

????????charset utf-8;

????????location / {

????????????????if ( $http_accept_language ~* ^en ) { # 如果accept_language的值以en開頭,也就是 英文,那么返回英文的站點目錄,否則返回中文的站點目錄,而且有時候會根據ip地址來返回不同語言的網 站。

????????????????root /html/lang/en;

????????}

????????????????root /html/lang/cn;

????????}

}

chrome瀏覽器接受的語言的設置,在這里可以添加:

四.lnmp網站架構?

網站架構指的是一個網站的搭建環境:操作系統+軟件+開發語言這么三個部分組成。而且很多情況下他 們是常用的相對比較固定的組合。軟件主要指的是中間件(主要指的是web服務應用程序)+數據庫。?

數據庫:mysql\oracle...數據庫管理工具,也叫做數據庫管理系統,DBMS:database manager system

linux + nginx + mysql + php lnmp架構

linux + apache + mysql + php lamp架構

windows + apache + mysql + php wamp架構

linux + nginx + mysql + tomcat lnmt架構 ,主要是跑java語言項目的,tomcat本身也是web服務程序,但是本身效率低,可以和nginx結合一起使用

linux + nginx + mysql + uwsgi lnmu架構,主要是跑python語言項目的

我們先捋清楚lnmp架構,其他的也就都簡單了。

五.正向代理?

客戶端使用的代理我們一般稱之為正向代理,服務端使用的代理我們一般稱之為反向代理。

客戶端如果使用了正向代理,那么服務端記錄的是代理的ip地址,代理可以有很多層,而且很多網絡是 正向代理和反向代理都存在。

我們做一個正向代理試試。

首先找一臺服務器,比如我用阿里云的一臺服務器作為正向代理服務器吧,安裝一個centos7.8,然后安裝個nginx

?# yum install nginx -y

# 去掉配置用的#號行和空行

[root@web01 conf.d]# grep -Ev '^$|#' /etc/nginx/nginx.conf.default >
/etc/nginx/nginx.conf

[root@web01 conf.d]# vim /etc/nginx/nginx.conf

# 修改nginx的配置分別添加http和https的server,其他配置保持不變,我們就添加個http的演示一下即可

# 將nginx.conf配置中的server部分替換為下面的server

# 下面配置正向代理轉發http請求

server {

????????resolver 223.5.5.5;

????????listen 80;

????????location / {

????????????????proxy_pass ????????http://$host$request_uri;

????????????????proxy_set_header ????????HOST $host;

????????????????proxy_buffers ????????256 4k;

????????????????proxy_max_temp_file_size ????????0k;

????????????????proxy_connect_timeout ????????30;

????????????????proxy_send_timeout ????????60;

????????????????proxy_read_timeout???????? 60;

????????????????proxy_next_upstream error timeout invalid_header http_502;

????????}

} # nginx -t

# systemctl restart nginx

# 這時候的nginx就不代表一個網站了,只是幫我們進行請求的轉發,就是單純的代理。

# 正向代理轉發https請求,這個就暫時不說了

通過實時查看nginx的訪問日志,可以看到Windows下設置代理IP和端口后,本地電腦訪問的所有網頁 會通過代理服務器進行訪問網頁,實現了正向代理的功能,并且隱藏了用戶自己真實的IP。

六.反向代理?

反向代理更多的時候是為了保護原站,還能用于負載均衡的效果?

我們再去克隆一個虛擬機作為反向代理服務器,使用nginx作為反向代理工具,安裝nginx,配置如下:

?[root@lb01 ~]# cat /etc/nginx/nginx.conf

worker_processes 1;

events {

????????worker_connections 1024;

}

http {

????????include ????????mime.types;

????????default_type application/octet-stream;

????????sendfile ????????on;

????????keepalive_timeout 65;

????????server {

????????????????listen 80;

????????????????server_name localhost;

????????????????location / {

????????????????????????proxy_pass http://192.168.61.140; # 將請求轉發到哪個ip地址,原站的ip地址,并 且其實我們正常的話是應該加一個DNS解析記錄,將我們的域名指向這個代理服務器的ip地址。我們沒有真實 公網主機來演示,所以改一下hosts文件的記錄即可,將原來的域名都指向這個代理主機的ip地址。然后訪問 網站,wireshark抓包就能看到轉發效果。

????????????????????????# 如果只是單純的配置上面這句話也可以完成反向代理,但是服務端的其他網站就沒辦法訪問 到了,因為nginx轉發的時候,會用客戶端請求的服務器的ip地址,不會用域名,域名丟了,那么服務端的nginx會自動打開一個網站給你響應。所以還是要設置一下nginx轉發時的host請求頭,讓它變成域名。

????????????????????????proxy_set_header Host $host; # 設置host,以防請求域名丟失。? ? ? ? ? ? ? ? ? ? ? ? ????????????????????#proxy_set_header jaden 666666; # 可以自定定制多個轉發請求時的請求頭鍵值對

????????????????????????#下面這兩個主要是為了記錄客戶端的真實ip地址,因為有了反向代理之后,我們看到記錄的 客戶端的ip地址是反向代理服務器的ip地址,這樣肯定不行呀,無法定位誰攻擊的我,所以我們需要記錄用戶 的真實ip,所以就可以在nginx轉發請求的時候加兩個請求頭鍵值對,將客戶端真實ip寫進去

????????????????????????proxy_set_header X-Real-IP $remote_addr;

????????????????????????proxy_set_header X-Forwarded-For $remote_addr; # 這個簡稱叫做XFF,業內一 般都用這個字段來記錄客戶端真實ip地址,也有用上面這個remote_addr來記錄的,所以我們都配置上吧, 將nginx的日志記錄格式修改一下,加上一個"真實ip:$http_x_forwarded_for"

????????????????????????#proxy_set_header X-Forwarded-For $http_x_forwarded_for;

????????????????}

????????}

}

# 后端服務器日志格式,vim /etc/nginx/nginx.conf,加上如下兩條

log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host ' '

$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/new.log main; # 給所有網站定義日志格式用的

# 保存退出,然后訪問網站,就看到日志了。

之前的網站服務器作為原站服務器,然后我們自己的物理機作為客戶端訪問。

七.負載均衡模式?

nginx做反向代理的同時,還可以配置負載均衡,為了演示負載均衡的效果,我們再創建一個web網站服 務器。而且要保證這兩臺web服務器跑著相同的網站。兩個網站簡單寫一些不太一樣的東西,為了是讓大家看效果。

修改nginx反向代理的配置:

http {

????????include mime.types;

????????default_type application/octet-stream;

????????sendfile ????????on;

????????keepalive_timeout 65;

????????upstream web{

????????????????server 192.168.61.140;

????????????????server 192.168.61.141;

????????}

????????server {

????????????????listen ????????80;

????????????????server_name localhost;

????????????????location / {

????????????????????????proxy_pass http://web; # 這個地方不寫死ip地址了,寫個上面配置中的upstream的名稱

????????????????????????proxy_set_header Host $host;

????????????????????????proxy_set_header X-Real-IP $remote_addr;

????????????????????????proxy_set_header X-Forwarded-For $http_x_forwarded_for;

????????????????}

????????}

}

八.總結?

總體來說,這些東西現在就算是記住了也會遺忘,所以我們點贊關注加收藏,遇到要用的時候再來看就好了。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83403.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openeuler系統(CentOs)圖形化桌面黑屏/丟失(開啟VNC服務沖突)

1. VNC服務開啟如下&#xff1a; https://zhuanlan.zhihu.com/p/5049263261 在centos8系統上使用tigervnc-server搭建VNC_centos8 tigervnc-server-CSDN博客 2. 上述操作完成后&#xff0c;連接VNC仍會出現黑屏&#xff0c;則需要編輯/root/.vnc/xstartup&#xff1a; [運維…

MySQL:Prepared Statement 預處理語句

預處理語句&#xff08;Prepared Statements&#xff09;是 MySQL 中一種用于執行 SQL 查詢的高效、安全的方法。通過使用預處理語句&#xff0c;可以顯著提升查詢性能&#xff0c;并防止 SQL 注入攻擊。本文將詳細介紹 MySQL 預處理語句的概念、使用方法及其優勢。 一、預處理…

EPPLUS——CAD c#讀寫EXCEL的第三方庫

EPPLUS(可支持NET35) 在 CAD 的 C# 二次開發中&#xff0c;使用 EPPLUS 庫處理 Excel 文件具有以下顯著優點&#xff0c;尤其在兼容性、便捷性和性能等方面契合 CAD 項目的需求&#xff1a; 1. 跨.NET 版本兼容性強&#xff0c;適配 CAD 多環境部署 多框架支持&#xff1a;EP…

Linux知識回顧總結----進程狀態

本章將會介紹進程的一些概念&#xff1a;馮諾伊曼體系結構、進程是什么&#xff0c;怎么用、怎么表現得、進程空間地址、物理地址、虛擬地址、為什么存在進程空間地址、如何感性得去理解進程空間地址、環境變量是如何使用的。 目錄 1. 馮諾伊曼體系結構 1.1 是什么 1.2 結論 …

微信小程序之bind和catch

這兩個呢&#xff0c;都是綁定事件用的&#xff0c;具體使用有些小區別。 官方文檔&#xff1a; 事件冒泡處理不同 bind&#xff1a;綁定的事件會向上冒泡&#xff0c;即觸發當前組件的事件后&#xff0c;還會繼續觸發父組件的相同事件。例如&#xff0c;有一個子視圖綁定了b…

Android Test3 獲取的ANDROID_ID值不同

Android Test3 獲取的ANDROID_ID值不同 這篇文章來說明上一篇文章中說到的一個現象&#xff1a;在同一個項目中&#xff0c;創建不同的 app module&#xff0c;運行同一段測試代碼&#xff0c;獲取到的 ANDROID_ID 的值不同。 我也是第一次認真研究這個現象&#xff0c;這個還…

JSON 和 LabVIEW Data Types 互相轉換

使用JSONtext C:\Program Files (x86)\National Instruments\LabVIEW 2021\examples\JDP Science\JSONtext JSONtext LabVIEW Data Types.vi

docker和docker-compose的版本對應關系怎么看?

docker和docker-compose的版本對應關系怎么看&#xff1f;最近在安裝這兩個工具&#xff0c;像知道他們的版本對應關系&#xff0c;查了不少資料才找到。 雖然 Docker 和 Docker Compose 的版本并不嚴格綁定&#xff0c;但是在某些情況下&#xff0c;新版本的 Docker Compose …

郵科ODM攝像頭:多維度護航高鐵安全系統方案解析

?高鐵作為現代交通的重要支柱&#xff0c;其安全穩定運行依賴于高效的監控體系。攝像頭系統作為高鐵安全管理的“視覺感知中樞”&#xff0c;憑借多場景覆蓋、智能分析以及環境適應性設計&#xff0c;在行車安全、設備維護、乘客服務等方面發揮著不可或缺的作用。本文將從技術…

盒模型小全

CSS盒子模型詳解 1. 定義 CSS盒子模型是用于描述HTML元素在頁面中布局和表現的核心概念之一。在CSS中&#xff0c;所有HTML元素都被視為一個矩形的盒子&#xff0c;這些盒子封裝了周圍的HTML元素&#xff0c;并允許在其他元素和周圍元素邊框之間的空間放置內容。 2. 組成部分…

自定義鼠標效果 - 瀏覽器擴展使用教程

自定義鼠標效果 - 瀏覽器擴展使用教程 這里寫目錄標題 自定義鼠標效果 - 瀏覽器擴展使用教程功能特點安裝方法Chrome/Edge瀏覽器 使用指南1. 更改鼠標光標樣式2. 啟用鼠標軌跡效果3. 自定義軌跡效果點狀/彩虹/漸隱軌跡&#xff1a;表情軌跡&#xff1a; 管理自定義光標支持的文…

基于SpringBoot實現的課程答疑系統設計與實現【源碼+文檔】

基于SpringBootVue實現的課程答疑系統采用前后端分離架構方式&#xff0c;系統設計了管理員、學生、老師三種角色&#xff0c;系統實現了用戶登錄與注冊、個人中心、學生管理、老師管理、科目類型管理、學生問題管理、老師回答管理、老師信息管理、關注列表管理、交流區、輪播圖…

御微半導體面試總結

前一陣子在公司干的難受&#xff0c;所以再合肥這邊面試了幾家公司&#xff0c;挑一個御微半導體來說一下吧&#xff0c;公司主要是做半導體晶元測量的&#xff0c;具體啥我也不太明白。 公司產品線多&#xff0c;每條產品線配有獨立的軟件、結構、光學控制等人員開發語言和框…

Android Compose 自定義圓形取色盤

val Dp.toPx: Floatget() {var scale 3f // MyApplication.context.resources.displayMetrics.apply { // scale density // }return value * scale}val colors List(360) { i ->Color.hsv(360f - i, 1f, 1f) // 360到1的所有HSV顏色 }Preview …

vscode 配置 latex

下載插件 安裝插件前自行安裝 texlive, 按照 https://tug.org/texlive/ 要求安裝 找到 settings 打開 json 文件 在 json 文件中添加如下配置 "latex-workshop.latex.tools": [{"name": "latexmk","command": "latexmk",&qu…

安寶特方案丨船舶智造的“AR+AI+作業標準化管理解決方案”(質檢)

船舶質檢管理現狀&#xff1a;質檢環節部分依賴人工檢測&#xff0c;質檢員依據質量標準對產品進行抽檢或全檢。人工質檢受質檢員主觀因素影響較大&#xff0c;不同質檢員對標準的把握可能存在差異。 一、痛點與需求 1 Arbigtec 人工經驗依賴嚴重&#xff1a; 質檢員的檢測準確…

jenkins gerrit-trigger插件配置

插件gerrit-trigger下載好之后要在Manage Jenkins -->Gerrit Trigger-->New Server 中新增Gerrit Servers 配置好保存后點擊“狀態”查看是否正常

ubuntu24.04下 zookeeper3.8.4 集群的配置

1、環境 1.1 三臺機器網絡互通&#xff0c;并做hosts解析 準備三臺及以上ubuntu24.04主機&#xff08;奇數&#xff09; rootzk-node01:~# hostname zk-node01rootzk-node01:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 u24-server10.0.49.215 zk-node01 10.0.4…

火山引擎 veFuser:面向擴散模型的圖像與視頻生成推理服務框架

資料來源&#xff1a;火山引擎-開發者社區 DiT 模型與推理挑戰 近年來&#xff0c;擴散模型&#xff08;Diffusion Models&#xff09;在生成式人工智能領域取得了突破性進展&#xff0c;尤其是在圖像和視頻生成方面表現卓越。基于 Transformer 的擴散模型&#xff08;DiT, D…

動態多目標進化算法:VARE(Vector Autoregressive Evolution)求解DF1-DF14,提供完整MATLAB代碼

一、VARE簡介 VARE&#xff08;Vector Autoregressive Evolution&#xff09;算法是2023年提出的一種新型的動態多目標優化&#xff08;DMO&#xff09;算法&#xff0c;旨在有效處理隨時間變化的多目標優化問題。它通過結合向量自回歸&#xff08;VAR&#xff09;模型和環境感…