Nignx configura el acceso Https, ¡sin palabras!

¡Continúe creando, acelere el crecimiento! Este es el segundo día de mi participación en el "Nuggets Daily New Plan · June Update Challenge", haz clic para ver los detalles del evento

decir antes:

De repente recibió tal tarea, el acceso de múltiples nombres de dominio debe usar el acceso de reenvío https, de hecho, el uso de Nginx es muy simple y la documentación también es muy completa (ya sea Tencent Cloud o Alibaba Cloud), la razón de entrando en el hoyo está el servidor Nginx.extrañeza y desvíos.

1. Desvío: Tomcat admite SSL

Configuración del certificado del servidor Tencent Cloud Tomcat

Modificar el server.xmlarchivo

<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": tenga en cuenta que esta configuración es diferente de Alibaba Cloud, recuerde modificarla

<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>
复制代码

Escuché de colegas que la configuración es buena, y el lugar para ingresar al pozo también lo es.Después de que se inicia el servidor, el puerto 443 también está ocupado.

启动nginx 不成功bind() a 0.0.0.0:443 falló (10013: se intentó acceder a un socket de una manera prohibida por sus permisos de acceso

2. Más cerca de casa

2.1 Descripción general de los requisitos

Al implementar varios servicios en un servidor (la dirección IP del servidor de Tencent Cloud) y es necesario acceder a diferentes servicios a través de diferentes nombres de dominio, el reenvío de nombres de dominio se puede realizar a través del proxy Nginx y también se puede lograr el acceso HTTPS configurando SSL. módulo. (Mi servidor usa el sistema de ventanas, si no hay un módulo SSL que deba habilitarse por sí mismo, es compatible de forma predeterminada)

Implemente 3 servicios al mismo tiempo en un servidor: servicio A, servicio B y servicio C. Los servicios deben configurarse con los siguientes nombres de dominio:

  • El nombre de dominio pangsir01.domain.com corresponde al servicio A;
  • El nombre de dominio pangsir02.domain.com corresponde al servicio B;
  • El nombre de dominio pangsir03.domain.com corresponde al servicio C;

Se accede al servicio a través de https y las solicitudes de http se redirigen a https .

2.2 Configuración del proxy del servicio

Configure Nginx para escuchar en el puerto 443 (== Estuve atrapado aquí durante mucho tiempo debido a la configuración de Tomcat, sin éxito ==), realice el reenvío de nombres de dominio y el acceso https, el certificado utilizado en este ejemplo es un certificado de formato crt

(1) Configuración del servicio 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) Configuración del Servicio 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) Configuración del servicio 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 Reenvío automático de solicitudes http

Agregue la configuración del servidor, escuche en el puerto 80 y realice la redirección https para todos los nombres de dominio

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

Mis necesidades están hechas aquí, el siguiente contenido pertenece al contenido extendido, grábalo


3. Configuración SSL de WebSocket

Si se usa websocket en el servicio A (la interfaz de acceso es: /websocket), el protocolo ws debe reemplazarse con el protocolo wss y se puede agregar una configuración de ubicación a la configuración del servidor del servicio A para interceptar el websocket para un proxy separado.

La configuración del servicio A, después de la modificación:

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";
        }
   }

复制代码

Supongo que te gusta

Origin juejin.im/post/7102323641420873742
Recomendado
Clasificación