Nginx使用集錦

配置了反向代理后,圖片資源或者js文件只加載到一半

查看日志,提示權(quán)限不足,即使使用了root來啟動(dòng)nginx 也不行。
資源所在的目錄不屬于root。
解決方法:
vim conf/nginx.conf
添加下面一行語句即可
user {資源目錄所屬的用戶}

資源mine類型問題

Snip20180301_33.png

http://blog.csdn.net/justnow_/article/details/52628022

根據(jù)版本來進(jìn)行反向代理配置

對 客戶端URL帶有版本號的請求 進(jìn)行反向代理,比如
/v1.0.0/XXX/AAA

先設(shè)置upstream,

upstream serverXXX{
     server http://localhost:8080
}

后設(shè)置 location, ###請注意url最后面的 斜杠###

server {
       listen 8080;
       server_name 172.16.3.188;
       client_max_body_size 5M;

       location /v1.5.0/ {
          proxy_pass http://tomcat_8080/;
          proxy_set_header Host $host:$server_port;
       }
}

效果: 將v1.5.0后面的請求url 轉(zhuǎn)發(fā)給 tomcat_8080后面
例如輸入

   http://xxx/v1.5.0/aaa/bbb

將會將 v1.5.0/后面的路徑 拼接到tomcat_8080后面,實(shí)際請求路徑為:

  http://tomcat_8080/aaa/bbb

提示:如果 proxy_pass http://tomcat_8080 后面不加斜杠
那會把整個(gè)請求url /v1.5.0/aaa/bbb 拼接到tomcat_8080后面,結(jié)果為
<pre>
http://tomcat_8080/v1.5.0/aaa/bbb
這個(gè)請求會報(bào)404錯(cuò)誤
</pre>

一般來說,服務(wù)器除了接收帶有版本號的請求url 以外,還要接收x`

Nginx轉(zhuǎn)發(fā)tomcat,導(dǎo)致tomcat取值有問題

Nginx+Tomcat+SSL
實(shí)際上,大規(guī)模的網(wǎng)站都有很多臺Web服務(wù)器和應(yīng)用服務(wù)器組成,用戶的請求可能是經(jīng)由 Varnish、HAProxy、Nginx之后才到應(yīng)用服務(wù)器,中間有好幾層。而中小規(guī)模的典型部署常見的是 Nginx+Tomcat 這種兩層配置,而Tomcat 會多于一臺,Nginx 作為靜態(tài)文件處理和負(fù)載均衡。

如果Nginx作為前端代理的話,則Tomcat根本不需要自己處理 https,全是Nginx處理的。用戶首先和Nginx建立連接,完成SSL握手,而后Nginx 作為代理以 http 協(xié)議將請求轉(zhuǎn)給 tomcat 處理,Nginx再把 tomcat 的輸出通過SSL 加密發(fā)回給用戶,這中間是透明的,Tomcat只是在處理 http 請求而已。因此,這種情況下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。

在代理模式下,Tomcat 如何識別用戶的直接請求(URL、IP、https還是http )?
在透明代理下,如果不做任何配置Tomcat 認(rèn)為所有的請求都是 Nginx 發(fā)出來的,這樣會導(dǎo)致如下的錯(cuò)誤結(jié)果:

    request.getScheme()  //總是 http,而不是實(shí)際的http或https
    request.isSecure()  //總是false(因?yàn)榭偸莌ttp)
    request.getRemoteAddr()  //總是 nginx 請求的 IP,而不是用戶的IP
  
    request.getRequestURL()  //總是 nginx 請求的URL 而不是用戶實(shí)際請求的 URL
    request.getServerName  //總是nginx請求的ip
    request.getServerPort //總是nginx請求的端口
    response.sendRedirect( 相對url )  //總是重定向到 http 上 (因?yàn)檎J(rèn)為當(dāng)前是 http 請求)


如果程序中把這些當(dāng)實(shí)際用戶請求做處理就有問題了。解決方法很簡單,只需要分別配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的轉(zhuǎn)發(fā)選項(xiàng):

proxy_set_header       Host $host;   //解決getRequestURL、getServerName、getServerPort
//如果nginx是80服務(wù),上面就夠,代表默認(rèn)servlet_port是80;否則需要Host $host:$server_port,不配置servlet_port會導(dǎo)致丟失端口

proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto  $scheme; //解決getScheme,isSecure,sendRedirect

配置Tomcat server.xml 的 Engine 模塊下配置一個(gè) Value:
< Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" />

配置雙方的 X-Forwarded-Proto 就是為了正確地識別實(shí)際用戶發(fā)出的協(xié)議是 http 還是 https。X-Forwarded-For 是為了獲得實(shí)際用戶的 IP。
這樣以上5項(xiàng)測試就都變?yōu)檎_的結(jié)果了,就像用戶在直接訪問 Tomcat 一樣。



是否會影響這些?
路徑:resin/webapps/my_proj/test/request.jsp

http://localhost:8080/my_proj/test/request.jsp?***

request.getRequestURI() /my_proj/test/request.jsp
request.getRequestURL() http://localhost:8080/my_proj/test/request.jsp
request.getContextPath() /my_proj 帶/WEB-INF的目錄地址
request.getServletPath()  /test/request.jsp

貌似request.getRequestURI() 為request.getContextPath()+request.getServletPath()

http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

http://shift-alt-ctrl.iteye.com/blog/2331455

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 33,042評論 24 1,002
  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,696評論 1 41
  • 作為一個(gè)小說狂,視力仍然很好,是不是讓人妒忌呢? 我的視力一直還算好,就算是長年累月的小說讀得暗無天日,我仍然沒有...
    青杏路涂閱讀 211評論 2 2
  • 產(chǎn)品介紹: QQ閱讀是騰訊出品的一款電子書閱讀應(yīng)用,一個(gè)移動(dòng)閱讀平臺; 產(chǎn)品目標(biāo): 基于閱讀本身這一介質(zhì),利用大數(shù)...
    2c5994723157閱讀 1,380評論 1 0

友情鏈接更多精彩內(nèi)容