網(wǎng)站首頁 編程語言 正文
不論是本地開發(fā),還是遠(yuǎn)程到 Server 開發(fā),還是給提供 demo 給人看效果,我們時(shí)常需要對 Nginx 做配置,Nginx 的配置項(xiàng)相當(dāng)多,如果考慮性能配置起來會比較麻煩。不過,我們往往只是需要一個(gè)靜態(tài) Server,或者一個(gè)反向代理 Server,這對 Nginx 來說小菜一碟。
簡介
Nginx 的安裝:
# CentOS yum install nginx; # Ubuntu sudo apt-get install nginx; # Mac brew install nginx;
一般可以在/etc/nginx/nginx.conf
中配置,啟動(dòng)參數(shù)為:
# 啟動(dòng) nginx -s start; # 重新啟動(dòng),熱啟動(dòng),修改配置重啟不影響線上 nginx -s reload; # 關(guān)閉 nginx -s stop; # 修改配置后,可以通過下面的命令測試是否有語法錯(cuò)誤 nginx -t;
-s
,signal,意思就是向 nginx 發(fā)送start|reload|stop
命令,還是很好理解的。先看一個(gè)最簡單的nginx.conf
配置:
events { # 需要保留這一個(gè)段落,可以為空 } http { server { listen 127.0.0.1:8888; location / { root /home/chenya/test/; } } }
啟動(dòng)后,訪問htttp://127.0.0.1:8888
,如果/home/chenya/test/
下有index.html
文件就會展示index.html
的內(nèi)容,否則返回404
。
Nginx 配置一個(gè) Web 服務(wù)器
以下對配置 Web 服務(wù)器的參數(shù)做簡單說明,包括如何配置端口、域名,如何處理請求,如何響應(yīng)請求。
1、 虛擬主機(jī)和請求的分發(fā)
域名和端口的配置
listen 127.0.0.1:8000; listen *:8000; listen localhost:8000; # IPV6 listen [::]:8000; # other params listen 443 default_serer ssl; listen 127.0.0.1 default_server accept_filter=dataready backlog=1024
主機(jī)名配置
server_name www.chenya.site chenya.site server_name *.chenya.com server_name ~^\.chenya\.com$
URI 匹配
location = / { # 完全匹配 = # 大小寫敏感 ~ # 忽略大小寫 ~* } location ^~ /images/ { # 前半部分匹配 ^~ # 可以使用正則,如: # location ~* \.(gif|jpg|png)$ { } } location / { # 如果以上都未匹配,會進(jìn)入這里 }
2、 文件路徑的定義
根目錄設(shè)置
location / { root /home/chenya/test/; }
別名設(shè)置
location /blog { alias /home/chenya/www/blog/; } location ~ ^/blog/(\d+)/([\w-]+)$ { # /blog/20141202/article-name # -> /blog/20141202-article-name.md alias /home/chenya/www/blog/$1-$2.md; }
首頁設(shè)置
index /html/index.html /php/index.php;
重定向頁面設(shè)置
error_page 404 /404.html; error_page 502 503 /50x.html; error_page 404 =200 /1x1.gif; location / { error_page 404 @fallback; } location @fallback { # 將請求反向代理到上游服務(wù)器處理 proxy_pass http://localhost:9000; }
try_files 設(shè)置
try_files $uri $uri.html $uri/index.html @other; location @other { # 嘗試尋找匹配 uri 的文件,失敗了就會轉(zhuǎn)到上游處理 proxy_pass http://localhost:9000; } location / { # 嘗試尋找匹配 uri 的文件,沒找到直接返回 502 try_files $uri $uri.html =502; }
Nginx 配置反向代理服務(wù)器
反向代理(reserve proxy)方式是指用代理服務(wù)器來接受 Internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)中的上游服務(wù)器,并將上游服務(wù)器上得到的結(jié)果返回給 Internet 上請求連接的客戶端,此時(shí)代理服務(wù)器對外的表現(xiàn)就是一個(gè) Web 服務(wù)器。
Nginx 具備超強(qiáng)的高并發(fā)高負(fù)載能力,一般會作為前端的服務(wù)器直接向客戶端提供靜態(tài)文件服務(wù);而業(yè)務(wù)一般還包含一些業(yè)務(wù)邏輯需要 Apache、Tomcat 等服務(wù)器來處理,故通常 Nginx 對外表現(xiàn)即為靜態(tài) Web 服務(wù)器也是反向代理服務(wù)器。
缺點(diǎn)是增加了一次請求的處理時(shí)間,優(yōu)點(diǎn)是降低了上游服務(wù)器的負(fù)載,盡量將壓力放在 Nginx 服務(wù)器上。
1、負(fù)載均衡配置
upstream,定義一個(gè)上游服務(wù)器集群
upstream backend { # ip_hash; server s1.chenya.com; server s2.chenya.com; } server { location / { proxy_pass http://backend; } }
2、反向代理
proxy_pass 將請求轉(zhuǎn)發(fā)到有處理能力的端上,默認(rèn)不會轉(zhuǎn)發(fā)請求中的 Host 頭部
location /blog { prox_pass http://localhost:9000; ### 下面都是次要關(guān)注項(xiàng) proxy_set_header Host $host; proxy_method POST; # 指定不轉(zhuǎn)發(fā)的頭部字段 proxy_hide_header Cache-Control; proxy_hide_header Other-Header; # 指定轉(zhuǎn)發(fā)的頭部字段 proxy_pass_header Server-IP; proxy_pass_header Server-Name; # 是否轉(zhuǎn)發(fā)包體 proxy_pass_request_body on | off; # 是否轉(zhuǎn)發(fā)頭部 proxy_pass_request_headers on | off; # 顯形/隱形 URI,上游發(fā)生重定向時(shí),Nginx 是否同步更改 uri proxy_redirect on | off; }
一個(gè)簡單的例子,Node.js
一個(gè)十分常見的需求:處理請求,如果是靜態(tài)文件,Nginx 直接返回,否則交給 Node 服務(wù)器處理。首先創(chuàng)建了一個(gè) Node 服務(wù)器:
const http = require('http'); http.createServer((req, res) => { res.end('hello world'); }).listen(9000);
任何請求過來都返回hello world
,簡版的 Nginx 配置如下,
events { # 這里可不寫東西 use epoll; } http { server { listen 127.0.0.1:8888; # 如果請求路徑跟文件路徑按照如下方式匹配找到了,直接返回 try_files $uri $uri/index.html; location ~* ^/(js|css|image|font)/$ { # 靜態(tài)資源都在 static 文件夾下 root /home/chenya/www/static/; } location /app { # Node.js 在 9000 開了一個(gè)監(jiān)聽端口 proxy_pass http://127.0.0.1:9000; } # 上面處理出錯(cuò)或者未找到的,返回對應(yīng)狀態(tài)碼文件 error_page 404 /404.html; error_page 502 503 504 /50x.html; } }
首先 try_files,嘗試直接匹配文件;沒找到就匹配靜態(tài)資源;還沒找到就交給 Node 處理;否則就返回 4xx/5xx 的狀態(tài)碼。
測試語法
nginx -t
原文鏈接:https://www.cnblogs.com/chenyablog/p/8341497.html
相關(guān)推薦
- 2022-10-03 使用useImperativeHandle時(shí)父組件第一次沒拿到子組件的問題_React
- 2022-10-05 VScode中C++頭文件問題的終極解決方法詳析_C 語言
- 2021-12-13 基于C#實(shí)現(xiàn)端口掃描器(單線程和多線程)_C#教程
- 2022-06-08 ASP.NET?Core中的靜態(tài)文件_基礎(chǔ)應(yīng)用
- 2022-07-15 C#中字符串與字節(jié)數(shù)組的轉(zhuǎn)換方式_C#教程
- 2023-03-13 Python實(shí)現(xiàn)柵欄密碼的加密解密方法詳解_python
- 2022-12-09 Python網(wǎng)絡(luò)編程之Python編寫TCP協(xié)議程序的步驟_python
- 2022-06-25 分享Pytest?fixture參數(shù)傳遞的幾種方式_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支