Nignx konfiguriert Https-Zugriff, sprachlos!

Schaffen Sie weiter, beschleunigen Sie das Wachstum! Dies ist der zweite Tag meiner Teilnahme an der „Nuggets Daily New Plan · June Update Challenge“, klicken Sie hier, um die Details der Veranstaltung anzuzeigen

Sag vorher:

Plötzlich erhielt eine solche Aufgabe, der Zugriff auf mehrere Domainnamen muss den https-Weiterleitungszugriff verwenden, tatsächlich ist die Verwendung von Nginx sehr einfach und die Dokumentation ist auch sehr vollständig (ob Tencent Cloud oder Alibaba Cloud), der Grund dafür Betreten der Grube ist der Nginx-Server Fremdheit und Umwege.

1. Umweg: Tomcat unterstützt SSL

Konfiguration des Tencent Cloud Tomcat-Serverzertifikats

Ändern Sie die server.xmlDatei

<Connector 
           port="443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol" 
           SSLEnabled="true" 
           scheme="https" 
           secure="true" 
           keystoreFile="conf\ssl\生产的证书名称我使用相对路径.jks" 
           keystoreType="JKS" 
           keystorePass="证书对应的密码" 
           clientAuth="false" 
           sslProtocol="TLSv1+TLSv1.1+TLSv1.2"
           maxThreads="150"	ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256">
</Connector>

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" secretRequired="" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
复制代码

keystoreType="JKS": Bitte beachten Sie, dass sich diese Konfiguration von Alibaba Cloud unterscheidet, denken Sie daran, sie zu ändern

<Engine defaultHost="我的域名" name="Catalina" jvmRoute="tomcat1" URIEncoding="UTF-8">
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Realm>
    <Host name="我的域名"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
</Engine>
复制代码

Von Kollegen habe ich gehört, dass die Konfiguration gut ist und der Einstieg in die Grube auch, nach dem Serverstart ist auch Port 443 belegt.

启动nginx 不成功bind() auf 0.0.0.0:443 fehlgeschlagen (10013: Es wurde versucht, auf einen Socket auf eine Weise zuzugreifen, die durch seine Zugriffsberechtigungen verboten ist

2. Näher zu Hause

2.1 Übersicht der Anforderungen

Wenn mehrere Dienste auf einem Server (der IP-Adresse des Servers von Tencent Cloud) bereitgestellt werden und auf verschiedene Dienste über verschiedene Domänennamen zugegriffen werden muss, kann die Domänennamenweiterleitung über den Nginx-Proxy durchgeführt werden, und der HTTPS-Zugriff kann auch durch Konfigurieren von SSL erreicht werden Modul. (Mein Server verwendet das Fenstersystem, wenn es kein SSL-Modul gibt, das selbst aktiviert werden muss, wird es standardmäßig unterstützt.)

Stellen Sie 3 Dienste gleichzeitig auf einem Server bereit: Dienst A, Dienst B und Dienst C. Die Dienste müssen mit den folgenden Domänennamen konfiguriert werden:

  • Der Domänenname pangsir01.domain.com entspricht Dienst A;
  • Der Domänenname pangsir02.domain.com entspricht Dienst B;
  • Der Domänenname pangsir03.domain.com entspricht Dienst C;

Der Zugriff auf den Dienst erfolgt über https und HTTP-Anfragen werden auf https umgeleitet .

2.2 Service-Proxy-Einstellungen

Konfigurieren Sie Nginx so, dass es auf Port 443 lauscht (==Ich hing hier lange wegen der Konfiguration von Tomcat fest, nicht erfolgreich==), realisieren Sie die Weiterleitung von Domänennamen und den https-Zugriff, das in diesem Beispiel verwendete Zertifikat ist ein Zertifikat im crt-Format

(1) Konfiguration von Dienst A

server {
    listen  443 ssl; #监听端口,Nginx1.5后推荐使用
    server_name  pangsir01.domain.com; #请求域名
    ssl_certificate ssl/证书名称A.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
    ssl_certificate_key     ssl/证书名称A.key; #crt证书key路径
    ssl_session_timeout     5m; #会话超时时间
    ssl_ciphers     ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; #SSL协议

    # 拦截所有请求
    location / {
        proxy_http_version 1.1; #代理使用的http协议
        proxy_set_header Host $host; #header添加请求host信息
        proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
        proxy_pass http://127.0.0.1:8001; #服务A访问地址
	}
}
复制代码

(2) Konfiguration von Dienst B

server {
    listen  443 ssl; #监听端口,Nginx1.5后推荐使用
    server_name  pangsir02.domain.com; #请求域名
    ssl_certificate ssl/证书名称B.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
    ssl_certificate_key     ssl/证书名称B.key; #crt证书key路径
    ssl_session_timeout     5m; #会话超时时间
    ssl_ciphers     ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; #SSL协议

    # 拦截所有请求
    location / {
        proxy_http_version 1.1; #代理使用的http协议
        proxy_set_header Host $host; #header添加请求host信息
        proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
        proxy_pass http://127.0.0.1:8002; #服务B访问地址
	}
}
复制代码

(3) Konfiguration von Dienst C

server {
    listen  443 ssl; #监听端口,Nginx1.5后推荐使用
    server_name  pangsir03.domain.com; #请求域名
    ssl_certificate ssl/证书名称C.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
    ssl_certificate_key     ssl/证书名称C.key; #crt证书key路径
    ssl_session_timeout     5m; #会话超时时间
    ssl_ciphers     ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; #SSL协议

    # 拦截所有请求
    location / {
        proxy_http_version 1.1; #代理使用的http协议
        proxy_set_header Host $host; #header添加请求host信息
        proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
        proxy_pass http://127.0.0.1:8003; #服务B访问地址
	}
}
复制代码

2.3 Automatische Weiterleitung von http-Anfragen

Fügen Sie die Serverkonfiguration hinzu, hören Sie auf Port 80 und führen Sie eine https-Umleitung für alle Domänennamen durch

server {
    listen       80; #监听端口
    server_name  a.domain.com b.domain.com c.domain.com; #请求域名
    return      301 https://$host$request_uri; #重定向至https访问。
}
复制代码

Meine Bedürfnisse sind hier erledigt, der folgende Inhalt gehört zum erweiterten Inhalt, notieren Sie es


3. SSL-Konfiguration von WebSocket

Wenn Websocket in Dienst A verwendet wird (die Zugriffsschnittstelle ist: /websocket), muss das ws-Protokoll durch das wss-Protokoll ersetzt werden, und der Serverkonfiguration von Dienst A kann eine Standortkonfiguration hinzugefügt werden, um den Websocket für einen separaten Proxy abzufangen.

Die Konfiguration von Dienst A nach der Änderung:

server {
       listen  443 ssl; #监听端口
       server_name  pangsir01.domain.com; #请求域名
       ssl_certificate ssl/证书名称A.crt; #crt证书路径
       ssl_certificate_key     ssl/证书名称A.key; #crt证书key路径
       ssl_session_timeout     5m; #会话超时时间
       ssl_ciphers     ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
       ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; #SSL协议

      # 拦截所有请求
       location / {
            proxy_http_version 1.1; #代理使用的http协议
            proxy_set_header Host $host; #header添加请求host信息
            proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
            proxy_pass http://127.0.0.1:8001; #服务A访问地址
        }
        
        # 拦截websocket请求
        location /websocket {
           proxy_pass http://127.0.0.1:8001;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
        }
   }

复制代码

Ich denke du magst

Origin juejin.im/post/7102323641420873742
Empfohlen
Rangfolge