nginx http强制跳转https
一.今天公司要配置https强制跳转
公司网址:比如打开http://www.****.com.cn/,然后跳转到https://www.*****.com.cn/
网站架构:用户–https—> nginx代理 —http—→ tomcat
二.配置nginx
因为公司域名多个,一个域名一个配置文件,没办法一个个去配置,写个公用的文件引用
1.先把证书拷贝到nginx目录
mkdir cert
2.配置公用的监听80文件
vim http.com.cn.conf
server {
listen 80 default;
server_name _;
return 301 https://$host$requets_uri; #301永久重定向,搜索引擎会将权重和 PR 值进行转移;302临时重定向,搜索引擎不会进行额外处理
}
3.公用文件include到外层nginx.conf加入以下
vim nginx.conf
include /home/S2B/nginx/nginx/conf/app-conf/prod/https.com.cn.conf;
4.把443证书的配置单独提取为公用
vim ssl.conf
ssl_certificate /home/S2B/nginx/nginx/conf/app-conf/cert/******.com.cn.crt; #ssl证书crt存放路径
ssl_certificate_key /home/S2B/nginx/nginx/conf/app-conf/cert/*****.com.cn.key; #ssl证书key存放路径
ssl_session_timeout 5m; #配置会话超时时间
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; ##优先采取服务器算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #定义加密算法
ssl_session_cache builtin:1000 shared:SSL:10m; #设置存储session参数的缓存的类型和大小。builtin在OpenSSL中构建的缓存;仅由一个工作进程使用。缓存大小在session中指定。如果没有给出大小,则等于20480个会话。使用内置高速缓存可能导致内存碎片。shared所有工作进程之间共享缓存。缓存大小以字节为单位指定;一兆字节可以存储大约4000个session。每个共享缓存都应该有一个任意名称。具有相同名称的缓存可以用于多个虚拟服务器。
add_header Strict-Transport-Security max-age=63072000; ##HSTS策略
5.把各域名文件里原80端口改成443 ssl,并把ssl.conf include进去就不要一个个配置
6.重启服务
./nginx -t
./nginx -s reload
7.报错[emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/nginx/conf/nginx.conf:69解决
1.安装OpenSSL
yum -y install openssl openssl-devel
2.在nginx安装目录下执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
3.运行命令
make
4.然后备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
5.关闭nginx
./nginx -s stop
6.将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
cp ./objs/nginx /usr/local/nginx/sbin/
7.通过命令查看是否已经加入成功
/usr/local/nginx/sbin/nginx -V