nginx反向代理配置詳解,Nginx篇--解讀nginx配置

 2023-11-19 阅读 38 评论 0

摘要:一.前述 之前講解了Nginx的源碼安裝與加載到系統服務中去,http://www.cnblogs.com/LHWorldBlog/p/8298226.html 今天詳細講解Nginx中的具體配置。 二.具體配置 #工作模式與連接數上限events{#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select |

一.前述

之前講解了Nginx的源碼安裝與加載到系統服務中去,http://www.cnblogs.com/LHWorldBlog/p/8298226.html 今天詳細講解Nginx中的具體配置。

二.具體配置

#工作模式與連接數上限
events
{
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#單個進程最大連接數(最大連接數=連接數*進程數)
worker_connections 65535;
}
event下的一些配置及其意義
?#單個后臺worker process進程的最大并發鏈接數?? ?
??? worker_connections? 1024;
??? # 并發總數是 worker_processes 和 worker_connections 的乘積
??? # 即 max_clients = worker_processes * worker_connections
??? # 在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4? 為什么
??? # 為什么上面反向代理要除以4,應該說是一個經驗值
??? # 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 * 8000 = 32000
??? # worker_connections 值的設置跟物理內存大小有關
??? # 因為并發受IO約束,max_clients的值須小于系統可以打開的最大文件數(小與句柄數)

?? # 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右
??? # 我們來看看360M內存的VPS可以打開的文件句柄數是多少:
??? # $ cat /proc/sys/fs/file-max
??? # 輸出 34336
??? # 32000 < 34336,即并發連接總數小于系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內
??? # 所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置
??? # 使得并發總數小于操作系統可以打開的最大文件數目
??? # 其實質也就是根據主機的物理CPU和內存進行配置
??? # 當然,理論上的并發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。
??? # ulimit -SHn 65535
nginx.conf配置文件
#定義Nginx運行的用戶和用戶組
user www www;

#nginx進程數,建議設置為等于CPU總核心數。
worker_processes 8;

#全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;

#進程文件
pid /var/run/nginx.pid;

#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求并不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;

#設定http服務器
http
{
include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #默認文件類型
#charset utf-8; #默認編碼
server_names_hash_bucket_size 128; #服務器名字的hash表大小
client_header_buffer_size 32k; #上傳文件大小限制
large_client_header_buffers 4 64k; #設定請求緩
client_max_body_size 8m; #設定請求緩
sendfile on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。send file ?高清圖片 大圖片 要關閉
autoindex on; #開啟目錄列表訪問,合適下載服務器,默認關閉。
tcp_nopush on; #防止網絡阻塞
tcp_nodelay on; #防止網絡阻塞
keepalive_timeout 120; #長連接超時時間,單位是秒

nginx反向代理配置詳解,#gzip模塊設置gzip on;(節省帶寬)

#開啟gzip壓縮輸出gzip_min_length 1k; #最小壓縮文件大小gzip_buffers 4 16k; #壓縮緩沖區gzip_http_version 1.0; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)gzip_comp_level 2; #壓縮等級gzip_types text/plain application/x-javascript text/css application/xml;#壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。gzip_vary on;#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用


# 虛擬主機一些配置及其意義

通過nginx可以實現虛擬主機的配置,nginx支持三種類型的虛擬主機配置,
1、基于ip的虛擬主機, (一塊主機綁定多個ip地址)
2、基于域名的虛擬主機(servername)
3、基于端口的虛擬主機(listen如果不寫ip端口模式)
示例基于虛擬機ip的配置,這里需要配置多個ip
server
{
? ? listen 192.168.20.20:80;
? ? server_name www.linuxidc.com;
? ? root /data/www;
}
server
{
? ? listen 192.168.20.21:80;
? ? server_name www.linuxidc.com;
? ? root /data/www;
}

?

nginx.conf下的配置
http{
server{
?? ?#表示一個虛擬主機
}
}
#location 映射(ngx_http_core_module)

location [ = | ~ | ~* | ^~ ] uri { ... }
?? ?location URI {}:
?? ??? ?對當前路徑及子路徑下的所有對象都生效;
?? ?location = URI {}: 注意URL最好為具體路徑。
?? ??? ?精確匹配指定的路徑,不包括子路徑,因此,只對當前資源生效;
?? ?location ~ URI {}:
?? ?location ~* URI {}:
?? ??? ?模式匹配URI,此處的URI可使用正則表達式,~區分字符大小寫,~*不區分字符大小寫;
?? ?location ^~ URI {}:
?? ??? ?不使用正則表達式
?? ?優先級:= > ^~ > ~|~* >? /|/dir/

/loghaha.html
/logheihei.html
^/log.*html$

#location匹配規則

NGINX反向代理、=前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
所有剩下的常規字符串,最長的匹配。如果這個匹配使用^?前綴,搜索停止。
正則表達式,在配置文件中定義的順序。
如果第3條規則產生匹配的話,結果被使用。否則,如同從第2條規則被使用

location?的執行邏輯跟?location?的編輯順序無關。矯正:這句話不全對,“普通?location?”的匹配規則是“最大前綴”,因此“普通?location?”的確與?location?編輯順序無關;

但是“正則?location?”的匹配規則是“順序匹配,且只要匹配到第一個就停止后面的匹配”;
“普通location?”與“正則?location?”之間的匹配順序是?先匹配普通?location?,再“考慮”匹配正則?location?。
注意這里的“考慮”是“可能”的意思,也就是說匹配完“普通?location?”后,有的時候需要繼續匹配“正則?location?”,有的時候則不需要繼續匹配“正則?location?”。兩種情況下,不需要繼續匹配正則?location?:
(?1?)當普通?location?前面指定了“?^~?”,特別告訴?Nginx?本條普通?location?一旦匹配上,則不需要繼續正則匹配;
(?2?)當普通location?恰好嚴格匹配上,不是最大前綴匹配,則不再繼續匹配正則

loghaha.html
l:? logha
l:? ^~ loghah
l:? loghaha.html
l:? =loghaha.html
l:?? ^logh.*html$
l:?? ^logha.*html$

?


#執行邏輯(!!!)

nginx? 收到請求頭:判定ip,port,hosts決定server
nginx location匹配:用客戶端的uri匹配location的uri
先普通
順序無關
最大前綴
匹配規則簡單
打斷:
^~
完全匹配
再正則
不完全匹配
正則特殊性:一條URI可以和多條location匹配上
有順序的
先匹配,先應用,即時退出匹配

ps: location中的??? / 跟
html: 相對于nginx目錄(默認是找尋Nginx中的當前HTML目錄)

ps1 :(反向代理理解)

centos靜態路由配置、通常的代理服務器,只用于代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的http請求發送到代理服務器中由代理服務器向Internet上的web服務器發起請求,最終達到客戶機上網的目的。

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器

?

PS2:總結

?

=絕對匹配

?

~* 正則匹配

?

\.把點轉義

vue跨域請求??

/最大前綴匹配

?

·~最大前綴匹配

?

先找不是正則的 然后找正則的 先匹配先應用

?

host:決策server負責處理
uri:決策location
反向代理:proxy_pass? ip:port[uri];

?

proxy_pass 反向代理

?

UNIX/LINUX??

不帶斜線:將uri透傳過去

?

帶斜線:訪問反向代理的主頁 將URI屏蔽掉
配置負載均衡(反向代理)!!!!!
upstream ?httpd-servers {
}
httpd-servers upstreams 名字

?PS3.修改默認HTML目錄

server {listen       80;server_name  localhost;#charset koi8-r;#access_log  /var/log/nginx/log/host.access.log  main;  location / { root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404              /404.html;

?默認路徑為/usr/share/nginx/html 修改完后的目錄為 /usr/share/alsa/pcm/default.conf。

修改nginx目錄報錯403解決辦法

剛好我就遇到了,一查發現是權限不足引起;

chmod -R 755 /usr/share/nginx/html

將web目錄設置為755權限,-R表示向下遞歸

chown -R nginx_user:nginx_user?? /usr/share/nginx/html

?

nginx安裝與配置詳解、轉載于:https://www.cnblogs.com/LHWorldBlog/p/8305737.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/179635.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息