WEB應用之httpd基礎入門(五)

  前文咱們聊到了httpd的啓動用戶和相關權限的說明,資源壓縮配置、https的實現,回顧請參考http://www.javashuo.com/article/p-vtkzzgve-kx.html;今天咱們來講說httpd的重定向、HSTS、反向代理的配置;html

  首先來了解下重定向吧,什麼意思呢?假如咱們訪問一個資源在服務器上不存在或者不在咱們對應訪問URL下,而用戶又不知道咱們新的URL的狀況下,咱們怎麼讓用戶訪問到咱們新的URL呢?日常咱們訪問某度,在瀏覽器上直接鍵入某度的域名,而後瀏覽器就直接給咱們響應,心細的你還會發現響應的不是http而是https,咱們明明沒有用https訪問某度,爲何響應的頁面倒是https呢?其實這就是http的重定向;所謂重定向就是咱們訪問的URL對應資源再也不原來的位置,而對於用戶來講,用戶數不知道URL背後對應的位置上哪裏,若是服務端不配置重定向,那麼用戶訪問到的資源要麼不是最新的要麼訪問不到,爲了解決這樣一個問題,重定向就起着把用戶的請求轉發到新URL上的做用;它的原理是這樣的,用戶訪問某一資源,當服務端收到用戶的請求後,檢查用戶訪問的URL對應資源不在原來的位置,此時服務器會以301或302的狀態碼響應客戶端,意思就是告訴客戶端訪問的資源再也不這個位置,對應的位置服務端會經過location首部告訴客戶端,客戶端收到這個響應報文後會再次向服務端新發來的URL再次請求,獲得響應的資源響應;nginx

  httpd實現重定向須要用到redirect指令,它的配置語法是Redirect [status] URL-path URL;status表示狀態信息,permanent表示返回永久重定向狀態碼 301;temp表示返回臨時重定向狀態碼302. 此爲默認值;web

  示例:把用戶訪問http的請求臨時重定向到https後端

   提示:以上配置意思是用戶訪問/https這個URI的時候,就會臨時重定向到https://www.test.com,固然redirect這個指令能夠用在server配置段中,虛擬主機配置段中,也能夠用在directory配置段中和.htaccess文件中;瀏覽器

  測試:安全

   提示:能夠看到咱們訪問www.test.com/https,瀏覽器訪問這個URL時,在響應報文中給咱們了一個location響應首部,而且把新的URL告訴咱們,而後瀏覽器自動去訪問location中的新URL ,最終把https://www.test.com的響應結果給咱們;服務器

  示例2:經過rewrite來實現http訪問跳轉爲https網絡

   提示:以上配置表示,開啓rewrite功能,並對用戶訪問任何內容的的URI 重寫爲https://用戶訪問的請求報文中host首部/index.html,意思就是用戶訪問www.test.com/abc.html服務端收到這樣的請求後,它會把用戶的URL重寫爲https://www.test.com/index.html,無論用戶訪問www.test.com下的任何內容,都會被處理爲訪問https://www.test.com/index.html測試

  測試:網站

   提示:能夠看到咱們在瀏覽器上無論訪問www.test.com/下的任何內容,都給咱們跳轉爲https://www.test.com/index.html了;

  HSTS:HTTP Strict Transport Security,翻譯過來就是http嚴格傳輸安全,咱們經過上面的示例能夠發現一個點,就是用戶第一次訪問服務端的時候,它倆是經過http協議傳輸數據,衆所周知http協議是明文傳輸數據的,假設用戶第一次訪問服務端的時候,被黑客中間把數據截獲並篡改了,可想而知,客戶端收到不是真正服務端的信息,而是被黑客篡改了的響應報文,後續客戶端就極可能不是訪問真正服務端響應給客戶端的URL,而是黑客篡改後的,這樣一來無疑存在着安全隱患;爲了解決這樣的問題,服務器端配置支持HSTS後,會在給瀏覽器返回的HTTP首部中攜帶HSTS字段。瀏覽器獲取到該信息後,會將全部HTTP訪問請求在內部作307跳轉到HTTPS。而無需任何網絡過程,這樣一來黑客就沒法經過網絡來抓取咱們的信息;HSTS preload list是Chrome瀏覽器中的HSTS預載入列表,在該列表中的網站,使用Chrome瀏覽器訪問時,會自動轉換成HTTPS。Firefox、Safari、Edge瀏覽器也會採用這個列表;意思就是在HSTS preload list中的網站就能夠實如今瀏覽器內部跳轉把http跳轉爲https;

  httpd配置實現HSTS是經過Header always set Strict-Transport-Security 指令實現,後面要給定一個最大時長,表示在給定的時長瀏覽器請求該網站都會使用https去訪問;

  示例:

   提示:以上表示設置strict-transport-security響應首部的值爲max-age=31536000,這樣配置後,咱們本身的網站就支持HSTS

   提示:能夠看到咱們訪問www.test.com對應響應報文就有Strict-Transport-Security響應首部;

   httpd做爲代理服務器;

  首先咱們來了解代理的概念吧,所謂代理就是本身沒有能力去作的事,讓別人幫着作,咱們把這種幫別人幹事的角色稱爲代理,我不知道這樣解釋是否正確;好比,咱們想去訪問某網站,可是該網站卻只有特定的網絡才能夠訪問獲得,這個時候如何讓其餘非特定網絡的其餘用戶訪問到呢?其實代理就是這個做用,做爲客戶端,代理能夠幫助客戶端去訪問特定網絡的資源,做爲服務端,代理能夠幫助服務端響應客戶端的請求;它兩不一樣的是,在客戶端的那一側咱們一般叫正向代理,意思就是代理客戶端訪問特定網絡資源,這只是針對http web服務來說是這樣的,但不管怎樣講,正向代理就是幫助客戶端去幹某事;在服務端一側咱們一般把代理叫作反向代理,意思就是它代理服務端響應客戶端的請求;代理其實咱們能夠理解爲中間的「人」,它既當客戶端,又當服務端,只是咱們站在不一樣的角度對它的稱呼不同;正向代理的角色的原理就是當客戶端的報文發送到代理服務器後,代理客戶端會更改客戶端的源IP或源端口信息;在真正服務端上看到的請求一般是正向代理的ip和端口;而對於反向代理來講,它主要是代理服務端響應客戶端的請求,它一般是修改客戶端的目標IP或目標端口,在客戶端響應的報文裏看,一般是代理服務器的做爲響應報文的源IP或源端口的響應,而在後端真正提供服務的服務端上看,請求報文一般是反向代理服務器的源IP或源端口;從上面的描述,代理服務器承擔了兩個角色,面向客戶端它是服務端,面向服務端它是客戶端;因此咱們在客戶端看到的響應報文源IP信息和端口都是代理服務器的,在服務端看到的請求報文源端口信息也都是代理服務器的源端口信息;一般狀況下正向代理除了能夠幫助客戶端訪問外界資源外,它還能夠起到隱藏客戶端的目的;而對於反向代理,它除了能夠幫助服務端響應客戶端的請求,同時它也能夠起到隱藏服務端的做用,這樣一來,客戶端和服務端都是經過代理實現了數據交互;在現實生活中咱們訪問的web服務一般都是基於這兩種代理來的,這也是代理最重要的做用;

   httpd反向代理的功能是基於proxy模塊實現的,其中最經常使用也是最重要的指令是proxypass和ProxyPassReverse

  示例:

   提示:以上配置表示客戶端訪問/nginx這個URI時,會將用戶請求反代到後面咱們真正指定的網站上;也就是說咱們用瀏覽器訪問www.test.com/nginx就會訪問到nginx官方主頁上去;

   提示:能夠看到咱們在虛擬主機里加了proxypass和proxypassreverse指令後,咱們訪問對應URI,瀏覽器會將咱們的請求跳轉到對應咱們指定的URL上去;固然咱們也能夠把proxypass指令用於location中;而proxypassreverse指令的主要做用是防止客戶端繞過反代服務器,直接請求後端主機;以上就是httpd簡單指令的使用更多關於httpd指令的使用,請參考官方文檔示例說明;

相關文章
相關標籤/搜索