欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx+Tomcat配置https的實(shí)現(xiàn)

 更新時間:2025年04月17日 09:38:12   作者:時光的IT小屋  
本文主要介紹了Nginx+Tomcat配置https的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

自已公司內(nèi)部的系統(tǒng),需要修改為https訪問,使用Nginx+Tomcat,此文記錄了整個過程,因?yàn)橄到y(tǒng)使用了jsp,而且頁面中大量使用了request.getScheme()+“: //”+request.getServerName()+“:”+request.getServerPort()來組合URL進(jìn)行數(shù)據(jù)的提交,導(dǎo)致最終界面中出現(xiàn)了http://協(xié)議,為了不改動代碼,最終方案采用nginx和tomcat都開啟https,由nginx轉(zhuǎn)發(fā)到tomcat的https上,最終完美搭建成功。

一、獲取證書

如果是互聯(lián)網(wǎng)應(yīng)用,需要向權(quán)威機(jī)構(gòu)申請證書,
此處給出局域網(wǎng)生成私有證書的方法(在linux下執(zhí)行):
1.創(chuàng)建服務(wù)器證書密鑰文件 server.key:

 openssl genrsa -des3 -out server.key 1024

輸入密碼,確認(rèn)密碼,自己隨便定義,但是要記住,后面會用到。
2.創(chuàng)建服務(wù)器證書的申請文件 server.csr

openssl req -new -key server.key -out server.csr

輸出內(nèi)容為:

 Enter pass phrase for root.key: ← 輸入前面創(chuàng)建的密碼
 Country Name (2 letter code) [AU]:CN ← 國家代號,中國輸入CN
 State or Province Name (full name) [Some-State]:HeNan ← 省的全名,拼音
 Locality Name (eg, city) []:ZhengZhou ← 市的全名,拼音
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany. ← 公司英文名
 Organizational Unit Name (eg, section) []: ← 可以不輸入
 Common Name (eg, YOUR name) []: ← 此時不輸入
 Email Address []:admin@mycompany.com ← 電子郵箱,可隨意填
 Please enter the following ‘extra' attributes
 to be sent with your certificate request
 A challenge password []: ← 可以不輸入
 An optional company name []: ← 可以不輸入

3.備份一份服務(wù)器密鑰文件

 cp server.key server.key.org

4.去除文件口令,生成私鑰

 openssl rsa -in server.key.org -out server.key

5.生成證書文件server.crt(公鑰,會發(fā)送給瀏覽器)

 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

6.有用的就是server.key和server.crt文件,下面配置Nginx時會用到

二、配置Nginx

修改conf/nginx.conf文件,修改server段的端口監(jiān)聽部分

    server {
        #listen       80;
		#比起默認(rèn)的80 使用了443 默認(rèn) 是ssl方式
        listen 443 default ssl;
		#開啟  如果把ssl on;這行去掉,ssl寫在443端口后面。這樣http和https的鏈接都可以用
        ssl on;
		#證書(公鑰.發(fā)送到客戶端的)
        ssl_certificate ssl/server.crt;
		#私鑰
        ssl_certificate_key ssl/server.key;

修改反向代理的部分

        location / {
			proxy_pass https://127.0.0.1:8443;
			proxy_redirect              off;
			proxy_set_header            Host $host:$server_port; 
			proxy_set_header            Remote_Addr $remote_addr; 
			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;  
			add_header Content-Security-Policy upgrade-insecure-requests;
            index  index.html index.htm index.jsp;			
        }

將http請求重寫為https請求的配置(寫在server段內(nèi))

error_page   497  https://$host:$server_port$uri;

三、配置Tomcat,打開https請求

修改conf/server.xml文件,打開Https的配置段,配置證書路徑,同時將server.crt和server.key文件拷貝至Tomcat/ssl目錄下

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https">
        <SSLHostConfig>
            <Certificate  certificateFile="ssl/server.crt" certificateKeyFile="ssl/server.key"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

四、各類問題解決

1、將訪問https端口的http請求地址重寫為https協(xié)議

在nginx.conf文件內(nèi)的server段中,增加對497狀態(tài)碼的轉(zhuǎn)發(fā)配置

error_page   497  https://$host:$server_port$uri;

原理:當(dāng)站點(diǎn)只允許https訪問時,使用http訪問時會報(bào)出497錯誤碼,此時使用error_page指令將497代碼的URL重定向到https的正確路徑
HTTP CODE 497的官方解釋:
497 - normal request was sent to HTTPS

2、redirect轉(zhuǎn)發(fā)時丟失端口號的處理

網(wǎng)上查到的各種配置中,很多配置中對Host的設(shè)置使用了h o s t 變量,因?yàn)?host變量,因?yàn)閔ost變量,因?yàn)閔ost中不含端口號信息,所以會丟失端口號,解決辦法為修改h o s t 為 host為host為http_post或h o s t : host:host:server_port

proxy_set_header            Host $host:$server_port; 
#這兩種配置都可以,其中$http_post是$http_HEADER的匹配規(guī)則,取的是請求頭中host的屬性值
proxy_set_header            Host $http_host; 

3、Jsp中使用request.getScheme()只得到http問題處理

這個問題目前只找到了一種解決方案,就是將Tomcat也開啟https協(xié)議,nginx轉(zhuǎn)發(fā)時使用https://協(xié)議進(jìn)行轉(zhuǎn)發(fā),就能完美解決這個問題。

附表 nginx.conf中可以使用的變量

變量名定義
$arg_PARAMETERGET請求中變量名PARAMETER參數(shù)的值
$args這個變量等于GET請求中的參數(shù)。例如,foo=123&bar=blahblah;這個變量只可以被修改
$binary_remote_addr二進(jìn)制碼形式的客戶端地址。
$body_bytes_sent傳送頁面的字節(jié)數(shù)
$content_length請求頭中的Content-length字段。
$content_type請求頭中的Content-Type字段。
$cookie_COOKIEcookie COOKIE的值。
$document_root當(dāng)前請求在root指令中指定的值。
$document_uri與$uri相同。
$host請求中的主機(jī)頭(Host)字段,如果請求中的主機(jī)頭不可用或者空,則為處理請求的server名稱(處理請求的server的server_name指令的值)。值為小寫,不包含端口。
$hostname機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值
$http_HEADERHTTP請求頭中的內(nèi)容,HEADER為HTTP請求中的內(nèi)容轉(zhuǎn)為小寫,-變?yōu)開(破折號變?yōu)橄聞澗€),例如:$http_user_agent(Uaer-Agent的值);
$sent_http_HEADERHTTP響應(yīng)頭中的內(nèi)容,HEADER為HTTP響應(yīng)中的內(nèi)容轉(zhuǎn)為小寫,-變?yōu)開(破折號變?yōu)橄聞澗€),例如: $sent_http_cache_control, $sent_http_content_type…;
$is_args如果$args設(shè)置,值為"?“,否則為”"。
$limit_rate這個變量可以限制連接速率。
$nginx_version當(dāng)前運(yùn)行的nginx版本號。
$query_string與$args相同。
$remote_addr客戶端的IP地址。
$remote_port客戶端的端口。
$remote_user已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名。
$request_filename當(dāng)前連接請求的文件路徑,由root或alias指令與URI請求生成。
$request_body這個變量(0.7.58+)包含請求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比較有意義。
$request_body_file客戶端請求主體信息的臨時文件名。
$request_completion如果請求成功,設(shè)為"OK";如果請求未完成或者不是一系列請求中最后一部分則設(shè)為空。
$request_method這個變量是客戶端請求的動作,通常為GET或POST。包括0.8.20及之前的版本中,這個變量總為main request中的動作,如果當(dāng)前請求是一個子請求,并不使用這個當(dāng)前請求的動作。
$request_uri這個變量等于包含一些客戶端請求參數(shù)的原始URI,它無法修改,請查看$uri更改或重寫URI。
$scheme所用的協(xié)議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值,如果要繞開系統(tǒng)調(diào)用,則必須在listen中指定地址并且使用bind參數(shù)。
$server_name服務(wù)器名稱。
$server_port請求到達(dá)服務(wù)器的端口號。
$server_protocol請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$uri請求中的當(dāng)前URI(不帶請求參數(shù),參數(shù)位于args,不同于瀏覽器傳遞的args),不同于瀏覽器傳遞的request_uri的值,它可以通過內(nèi)部重定向,或者使用index指令進(jìn)行修改。不包括協(xié)議和主機(jī)名,例如/foo/bar.html

到此這篇關(guān)于Nginx+Tomcat配置https的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx+Tomcat配置https內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解

    Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解

    這篇文章主要介紹了Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 關(guān)于nginx?反向代理?URL替換方案

    關(guān)于nginx?反向代理?URL替換方案

    這篇文章主要介紹了nginx?反向代理?URL替換方案,本文給大家代理兩種方法一種是直接替換location匹配部分,第二種是使用nginx?的rewrite?模塊,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Nginx之為已安裝nginx動態(tài)添加模塊的方法

    Nginx之為已安裝nginx動態(tài)添加模塊的方法

    本篇文章主要介紹了Nginx之為已安裝nginx動態(tài)添加模塊的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • nginx網(wǎng)站服務(wù)如何配置防盜鏈(推薦)

    nginx網(wǎng)站服務(wù)如何配置防盜鏈(推薦)

    這篇文章主要介紹了nginx網(wǎng)站服務(wù)如何配置防盜鏈,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Nginx限流和黑名單配置的策略

    Nginx限流和黑名單配置的策略

    這篇文章主要介紹了Nginx限流和黑名單配置,Nginx的限流主要是兩種方式,限制訪問頻率和限制并發(fā)連接數(shù),Nginx?按請求速率限速模塊使用的是漏桶算法,即能夠強(qiáng)行保證請求的實(shí)時處理速度不會超過設(shè)置的閾值,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • 制作nginx的RPM包教程

    制作nginx的RPM包教程

    這篇文章主要介紹了制作nginx的RPM包的方法,需要的朋友可以參考下
    2014-07-07
  • nginx實(shí)現(xiàn)ip限流的具體示例

    nginx實(shí)現(xiàn)ip限流的具體示例

    限流的方式油很多種,本文主要介紹了nginx實(shí)現(xiàn)ip限流的具體示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Nginx代理Partainer的具體使用

    Nginx代理Partainer的具體使用

    本文主要介紹了Nginx代理Partainer的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 深入探究Nginx體系化之虛擬主機(jī)分類及配置實(shí)現(xiàn)

    深入探究Nginx體系化之虛擬主機(jī)分類及配置實(shí)現(xiàn)

    Nginx,這款備受推崇的高性能 Web 服務(wù)器,以其強(qiáng)大的性能和靈活的配置而廣受歡迎,在實(shí)際應(yīng)用中,虛擬主機(jī)是一項(xiàng)重要的功能,允許我們在單個服務(wù)器上托管多個網(wǎng)站,本文將深入探討 Nginx 虛擬主機(jī)的分類和配置實(shí)現(xiàn),幫助您構(gòu)建一個高效多站點(diǎn)托管平臺
    2023-08-08
  • Nginx實(shí)現(xiàn)前端灰度發(fā)布

    Nginx實(shí)現(xiàn)前端灰度發(fā)布

    灰度發(fā)布是一種重要的策略,它允許我們在不影響所有用戶的情況下,逐步推出新功能或更新,通過灰度發(fā)布,我們可以測試新版本的穩(wěn)定性和性能,下面就來介紹一下前端灰度發(fā)布的使用,感興趣的可以了解一下
    2025-03-03

最新評論