用nginx实现强制http服务使用https访问

    xiaoxiao2023-11-14  161

    背景

    很多应用的软件部署时采用的http,由于安全问题会被要求用https,所以在不影响已部署的服务的情况下,可以让nginx来帮助实现这个功能。

    实现

    获取一个证书

    证书获取有两种办法:经过认证的证书以及自己生成的没被认证的证书,生产环境还是推荐使用第一种。

    获取免费的认证证书

    1)获取证书,首先需要一个域名,大家可以参考 https://blog.csdn.net/HW140701/article/details/85156494 以及 https://blog.csdn.net/HW140701/article/details/85176191 2)申请免费证书

    https://blog.csdn.net/mybelief321/article/details/54429314

    自己生成证书 创建您自己的CA证书: $ openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout ca.key \ -x509 -days 365 -out ca.crt -subj '/C=CN/ST=PEK/L=Bei Jing/O=YUN/CN=CA'

    生成证书签名请求:

    $ openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout 域名.key \ -out 域名.csr -subj '/C=CN/ST=PEK/L=Bei Jing/O=YUN/CN=域名'

    使用 CA 证书及CA密钥 对证书签名请求进行签发,生成 x509证书

    $ openssl x509 -req -days 365 -in 域名.csr -CA ca.crt \ -CAkey ca.key -CAcreateserial -out 域名.crt

    自此自签名证书生成完毕

    安装nginx

    1、安装nginx依赖环境包

    yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

    2、官网下载nginx1.12.0压缩包

    wget https://nginx.org/download/nginx-1.12.0.tar.gz

    3、解压nginx

    tar zxf nginx-1.12.0.tar.gz

    4、进入解压目录

    cd nginx-1.12.0

    5、编译nginx

    1)默认编译方式

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

    注:以上–with-http_ssl_module这个模块是https的关键,必须安装!

    6、安装nginx

    make && make install

    7、启动nginx

    nginx的可执行文件在 /usr/local/nginx/sbin/目录里面

    /usr/local/nginx/sbin/nginx

    即可启动

    /usr/local/nginx/sbin/nginx -s stop

    可以停掉

    /usr/local/nginx/sbin/nginx -s reload

    当修改了配置文件,上面的命令可以重新加载配置文件

    8 . 查看 nginx是否启动成功

    注意下面红框的模块一定要存在,这是配置https的关键

    配置nginx(https)

    打开nginx的配置文件

    vim /usr/local/nginx/conf/nginx.conf

    需要修改server的80和443端口对应的配置

    80的server的意思是:当收到客户端要访问 http://域名时(当然server_name也可以是域名+端口号),访问的是80端口,会强制将访问ip转换成https://域名。所以会跳转到 443的server的配置(https对应的端口是443),因为启用了ssl模块,所以会使用你所配置的两个证书和密钥文件进行验证,当成功后会执行下面的location的配置,跳转到location里面配置的网址,这个网址就是我们想给他加上https的网址。

    重新reload以下nginx

    /usr/local/nginx/sbin/nginx -s reload

    测试

    当完成以上配置及重启nginx后,可以在浏览器访问http://域名,看是否会自动跳转称https://域名

    参考

    https://blog.csdn.net/HW140701/article/details/85156494

    https://blog.csdn.net/HW140701/article/details/85176191

    https://blog.csdn.net/mybelief321/article/details/54429314

    最新回复(0)