¡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.xml
archivo
<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 "%r" %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";
}
}
复制代码