nginx如何整合https呢?

乔欣 Java每日一问 发布时间:2023-03-13 21:10:16 阅读数:14913 1
下文笔者讲述nginx整个https的方法分享,如下所示

nginx整个https的实现思路

1.准备密钥文件
2.修改nginx.conf配置文件
3.重新load nginx即可完成nginx整合https

生成密钥文件

使用keytool生成PKCS12格式的密钥
然后通过openssl取出cert和key
具体命令如下:

# 生成PKCS12格式的密钥文件
keytool -genkey 
     -alias localhost 
	 -keyalg RSA -keysize 2048 
	 -sigalg SHA256withRSA 
	 -storetype PKCS12 
	 -keystore localhost.p12 
	 -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 
	 -storepass changeit 
	 -keypass changeit

# 导出pem(certificate)
openssl pkcs12 -nokeys -in ./localhost.p12 -out localhost.pem

# 导出key
openssl pkcs12 -nocerts -nodes -in ./localhost.p12 -out localhost.key

配置nginx.conf

新建一个nginx.conf文件
或修改原nginx.conf文件
 
 /usr/local/nginx/conf目录下
server {
    listen 443 ssl;
    server_name localhost;
    
    ssl_certificate /key-path/localhost.pem;
    ssl_certificate_key /key-path/localhost.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_prefer_server_ciphers on; 

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8000/;
    }
}

注意事项:
ssl_certificate:配置的是cert文件
ssl_certificate_key:配置的是private key文件。

proxy_pass http://127.0.0.1:8000/:
   这个作用是把请求反向代理到这个地址上。

开启http并重定向到https

 
开启http很简单
  将listen 80;加到listen 443 ssl

或
  新加一个server配置
server {
    listen 443 ssl;
    server_name localhost;
    
    ssl_certificate /key-path/localhost.pem;
    ssl_certificate_key /key-path/localhost.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_prefer_server_ciphers on; 

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8000/;
    }
}

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8000/;
    }
}

nginx重定向到https两种方式

 
方式1:
   return 301

server {
    listen 80;
    server_name localhost;
    return 301 https://127.0.0.1$request_uri;
}

方式2:
  使用rewrite如下

server {
    listen 80;
    server_name localhost;
    rewrite ^(.*)$ https://$host$1 permanent;
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202303/6027.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者