使用 Nginx 默认配置为 iServer 开启 HTTPS(不安装扩展模块 sub_filters)

作者:陈陈敏CHEN

目录

1、环境介绍

2、确认 Nginx 配置

3、具体配置

4、完整配置

5、验证配置


导语:在之前的文章中,我们推荐使用扩展模块 sub_filters 来为 iServer 开启 HTTPS。然而,sub_filters 模块需要额外安装才能使用,而多数客户因为项目原因不愿重新安装 Nginx。在这种情况下,我们该如何为 iServer 启用 HTTPS 呢?下面让我来为大家介绍如何配置吧!

1、环境介绍

  • iServer:supermap-iserver-11.2.0-linux-x64
  • Nginx:nginx/1.24.0
  • 操作系统:CentOS-7-x86_64

2、确认 Nginx 配置

  • 在返回结果中看到有 --with-http_ssl_module,说明支持 ssl
[root@iServer nginx-1.24.0]# /usr/local/webserver/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module

3、具体配置

  • Nginx 的 HTTPS 具体配置(nginx.conf)
server {
      # 在 8443 端口上监听 SSL 连接
      listen       8443  ssl;
      # 指定服务器名称为 localhost,根据机器的实际情况填写
      server_name  localhost;
      # 指定 SSL 证书文件
      ssl_certificate      mynginx.pem;
      # 指定 SSL 私钥文件
      ssl_certificate_key  mynginx.key;
      # 设置共享的 SSL 会话缓存,大小为 1MB
      ssl_session_cache    shared:SSL:1m;
      # SSL 会话超时时间设置为 5 分钟
      ssl_session_timeout  5m;
      # 支持的 SSL/TLS 协议版本
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
      # 支持的加密算法,指定了一些安全性较高的加密套件并禁用了弱加密算法
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
      
	  # ip/域名:端口,将主机名和端口转发到后端服务器
	  proxy_set_header Host $host:$server_port; 
      # 转发真实客户端 IP 地址     
	  proxy_set_header X-Real-IP $remote_addr;
      # 同样转发远程主机地址
	  proxy_set_header REMOTE-HOST $remote_addr;
      # 转发经过代理的 IP 地址列表
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      # 指示原始协议为 HTTPS
	  proxy_set_header X-Forwarded-Proto https; 
       
	  location  / {
          # 所有重定向的 HTTP 请求都改为 HTTPS
		  proxy_redirect http:// https://;
          # 将请求转发到后端服务器的 8090 端口
		  proxy_pass http://172.16.13.234:8090;
	  }
      # 针对静态文件配置请求处理
	  location ~ .*\.(js|css|jpg|png|json|svg)$ {
		  proxy_pass http://172.16.13.234:8090;
          # 设置响应的过期时间为 30 分钟
		  expires 30m;
	  }
}
  • Tomcat 的配置(server.xml,在iServer 包中位于 /iServer/conf/server.xml)

# 关键参数说明:

  • remoteIpHeader:定义请求中指定的远程客户端真实 IP 的 HTTP 头,此处设置为 X-Forwarded-For,这个头通常由反向代理或负载均衡器设置,用来转发真正的客户端 IP
  • protocolHeader:定义用于获取请求协议(http 或 https)的头部,这里使用的是 X-Forwarded-Proto,这对于确定请求使用的协议非常重要,特别是在混合模式运行时(既有 HTTP 也有 HTTPS)
  • protocolHeaderHttpsValue:指定当 protocolHeader 为 HTTPS 请求时所采用的值,这里为 https,这样 Tomcat 可正确识别出请求是通过安全通道发送的
  • httpServerPort:该属性表示 HTTP 请求的端口,由 X-Forwarded-Port 头决定,通常这个头是由负载均衡器设置的
  • httpsServerPort:该属性明确声明 HTTPS 请求的端口,设置为 8443,这是 Tomcat 默认使用的 HTTPS 端口之一,可根据需要进行修改
  • 配置放在内/外会产生不同的作用:放在 Host 内,该 Value 仅对特定的 Host 生效;若放在 Host 外将对当前 Engine 下的所有 Host 生效,推荐放在 Host 内

4、完整配置

  • Nginx nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

	server {
        listen       8443  ssl;
        server_name  localhost;
        ssl_certificate      mynginx.pem;
        ssl_certificate_key  mynginx.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
		
		#ip/域名:端口
		proxy_set_header Host $host:$server_port;      
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header REMOTE-HOST $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto https; 
		
		location  / {
			proxy_redirect http:// https://;
			proxy_pass http://172.16.13.234:8090;
			
		}
		
		location ~ .*\.(js|css|jpg|png|json|svg)$ {
			proxy_pass http://172.16.13.234:8090;
			expires 30m;
		}
 
    }
}
  • Tomcat server.xml




  
  
  
  
  
  
  
  

  
  
    
    
  

  
  

    
    


    
    
    
    
    
    
    
    

    
    

    

    
    

      
      

      
      
        
        
      

      
		
		
        
        

        
        
		

      
    
  

5、验证配置

  • 启动 iServer、Nginx,浏览器访问 https://ip:8443 验证配置成功

使用 Nginx 默认配置为 iServer 开启 HTTPS(不安装扩展模块 sub_filters)_第1张图片使用 Nginx 默认配置为 iServer 开启 HTTPS(不安装扩展模块 sub_filters)_第2张图片

你可能感兴趣的:(SuperMap,nginx,https)