Nginx proxy_pass如何到https后端
Nginx proxy_pass到https后端
使用SSL/TLS加密,確保NGINX或NGINX Plus與上游服務(wù)器之間的HTTP流量安全。
本文解釋了如何加密NGINX和上游組或代理服務(wù)器之間的HTTP流量。
生成證書(自簽名證書需要)
生成自簽名CA證書。
openssl genrsa -out ca.key 2048 openssl req -new -key ca.key -out ca.csr openssl x509 -req -sha256 -days 365 -in ca.csr -signkey ca.key -out ca.crt
生成客戶端證書和密鑰。
openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
生成服務(wù)器證書和密鑰。
openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
配置NGINX
http { #... upstream backend.example.com { server backend1.example.com:443; server backend2.example.com:443; } server { listen 80; server_name www.example.com; #... location /upstream { proxy_pass https://backend.example.com; # 連接上游服務(wù)器時(shí),供上游服務(wù)器驗(yàn)證的證書 proxy_ssl_certificate /etc/nginx/client.pem; proxy_ssl_certificate_key /etc/nginx/client.key; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_ssl_ciphers HIGH:!aNULL:!MD5; # // 驗(yàn)證上游服務(wù)器時(shí),使用的ca證書 proxy_ssl_trusted_certificate /etc/nginx/trusted_ca_cert.crt; proxy_ssl_verify on; proxy_ssl_verify_depth 2; # 每次連接都需要完整的ssl握手,消耗cpu較大,加上此參數(shù),可以復(fù)用連接,減少握手次數(shù) proxy_ssl_session_reuse on; proxy_ssl_server_name on; # 次參數(shù)不是太懂 proxy_ssl_name backend.example.com; } } server { listen 443 ssl; server_name backend1.example.com; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key; # 驗(yàn)證客戶端使用的CA證書 ssl_client_certificate /etc/ssl/certs/ca.crt; # 開啟驗(yàn)證客戶端 ssl_verify_client on; location /yourapp { proxy_pass http://url_to_app.com; #... } server { listen 443 ssl; server_name backend2.example.com; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key; ssl_client_certificate /etc/ssl/certs/ca.crt; ssl_verify_client on; location /yourapp { proxy_pass http://url_to_app.com; #... } } }
官網(wǎng)鏈接
Nginx proxy_pass后出現(xiàn)部分請(qǐng)求404
有一個(gè)后端服務(wù),地址是 http://127.0.0.1:8888/web-test/
nginx 配置如下:
location ^~ /web-test/ { proxy_pass http://127.0.0.1:8888; }
訪問(wèn) http://ip:port/web-test/
是正常的
但我想改寫成訪問(wèn) http://ip:port/test/
替代訪問(wèn) http://ip:port/web-test/
nginx 配置如下:
location ^~ /test/ { proxy_pass http://127.0.0.1:8888/web-test/; }
重寫后訪問(wèn) http://ip:port/test/
后出現(xiàn)問(wèn)題,看到請(qǐng)求下面的 靜態(tài)資源URL 都返回 404,也就是說(shuō)頁(yè)面的靜態(tài)資源發(fā)起的請(qǐng)求還是訪問(wèn)了原來(lái)的 /web-test 路由
http://127.0.0.1:8888/web-test/resource/... http://127.0.0.1:8888/web-test/image/... http://127.0.0.1:8888/web-test/system/... http://127.0.0.1:8888/web-test/其他 URI/...
這種情況 nginx 要怎樣配置重寫規(guī)則?訪問(wèn) http://ip:port/test/
能返回正常的請(qǐng)求
解決辦法
1、
location ^~ /test/ { proxy_pass http://127.0.0.1:8888/web-test/; }
其他 靜態(tài)資源URI 請(qǐng)求也 proxy_pass 到后端服務(wù)
location /web-test/resource/ { proxy_pass http://127.0.0.1:8888; } location /web-test/image/ { proxy_pass http://127.0.0.1:8888; }
location /其他靜態(tài)資源URI請(qǐng)求 { proxy_pass http://127.0.0.1:8888; }
這種方式要找到所有的 靜態(tài)資源URL 請(qǐng)求,一個(gè)個(gè)重寫
2、直接修改后端服務(wù)路由為 http://127.0.0.1:8888/test/,規(guī)則變?yōu)?/p>
location ^~ /test/ { proxy_pass http://127.0.0.1:8888; }
就可以了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說(shuō)明
- Nginx?location和proxy_pass配置示例詳解
- Nginx中proxy_pass的斜杠的兩種方式
- Nginx的location路徑與proxy_pass匹配規(guī)則說(shuō)明
- Nginx捕獲并自定義proxy_pass返回的錯(cuò)誤問(wèn)題
- nginx中如何配置proxy_pass
- Nginx rewrite和proxy_pass的區(qū)別及說(shuō)明
- nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)
- nginx反向代理proxy_pass遇到的死循環(huán)問(wèn)題
- 解決nginx配置proxy_pass之后,響應(yīng)變慢的問(wèn)題
- Nginx使用if指令實(shí)現(xiàn)多個(gè)proxy_pass方式
- Nginx中proxy_pass使用小結(jié)
相關(guān)文章
nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟
這篇文章主要給大家介紹了關(guān)于nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12一文搞懂Nginx限流(簡(jiǎn)單實(shí)現(xiàn))
這篇文章主要介紹了一文搞懂Nginx限流(簡(jiǎn)單實(shí)現(xiàn)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Nginx+RTMP+nginx-http-flv-module環(huán)境搭建
本文主要介紹了Nginx+RTMP+nginx-http-flv-module環(huán)境搭建,搭建方式可用于直播、視頻會(huì)議等場(chǎng)景,同時(shí)支持HTTP-FLV,方便在瀏覽器中進(jìn)行播放2024-03-03Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的教程詳解
這篇文章主要為大家詳細(xì)介紹了Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的相關(guān)教程,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03通過(guò)Nginx配置實(shí)現(xiàn)外網(wǎng)訪問(wèn)內(nèi)網(wǎng)數(shù)據(jù)庫(kù)的操作指南
項(xiàng)目開發(fā)部署中經(jīng)常會(huì)遇到MySQL或Oracle數(shù)據(jù)庫(kù)安裝在內(nèi)網(wǎng),而我們的應(yīng)用服務(wù)只能部署在外網(wǎng),如果實(shí)現(xiàn)外網(wǎng)服務(wù)訪問(wèn)連接內(nèi)網(wǎng)的數(shù)據(jù)庫(kù)呢?本次介紹如何通過(guò)Nginx配置實(shí)現(xiàn)外網(wǎng)訪問(wèn)內(nèi)網(wǎng)數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-10-10Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問(wèn)題
這篇文章主要介紹了Nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)地址解決跨域問(wèn)題的方法,文中介紹的很詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01Nginx?Proxy?Manager的具體實(shí)現(xiàn)
Nginx?Proxy?Manager?就是一個(gè)?Nginx?的代理管理器,本文主要介紹了Nginx?Proxy?Manager的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05nginx部署多個(gè)前端項(xiàng)目詳細(xì)步驟
最近一臺(tái)服務(wù)器要配置多個(gè)前端項(xiàng)目,當(dāng)然前后端分離就需要nginx來(lái)配置了,下面這篇文章主要給大家介紹了關(guān)于nginx部署多個(gè)前端項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2023-10-10