下载SSL证书后,存放nginx的conf目录下,修改nginx配置文件(如何配置来自阿里云文档)
[root@test ~]# /usr/local/nginx/conf/nginx.conf
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
下面对应中文注释
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
root html;
index index.html index.htm;
ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/domain name.key; #将domain name.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 / {
root html; #站点目录。
index index.html index.htm;
}
}
修改后重启nginx
[root@test ~]# /usr/local/nginx/sbin/nginx -s reload
发现无效,使用一下命令检查配置文件,发送ssl错误
[root@test ~]# /usr/local/nginx/sbin/nginx -t
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:42
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
安装openssl并从nginx的解压目录下重新得到一个新的nginx
[root@test ~]# yum -y install openssl openssl-devel
[root@test ~]# cd nginx-1.9.9
[root@test nginx-1.9.9]# ./configure
[root@test nginx-1.9.9]# ./configure --with-http_ssl_module
[root@test nginx-1.9.9]# make
将新的nginx覆盖到原有的nginx,以防万一,备份原有的nginx
[root@test nginx-1.9.9]# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
[root@test nginx-1.9.9]# cp -rfp objs/nginx /usr/local/nginx/sbin/nginx
再次检查配置文件就正常了
[root@test ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动nginx就好了
[root@test ~]# /usr/local/nginx/sbin/nginx
结果还不行……疯了 直接就无法访问了都
我用的是阿里云服务器,忘记在安全组添加443端口了
还有一个是服务器的防火墙没有打开443端口 下面就放开443端口并重启
[root@test ~]# firewall-cmd --add-port=443/tcp --zone=public --permanent
[root@test ~]# firewall-cmd --reload
设置完就真的好了 https可以访问了
又发现一个坑,由于我使用的是免费的证书,可能是因为这个原因,导致我每一个二级域名都需要配置一个对应的SSL证书 ,多申请几个就好了,具体可查看免费获取SSL证书
下面贴上我的nginx配置
记得有一点 配置中的端口号6666是我随便写的 尽量避免不要用
为啥? 去看这个 SpringBoot的项目部署 中 下面的关于 Chrome 访问不了的情况
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 10M;
client_header_buffer_size 32k;
#gzip on;
server {
listen 443 ssl;
server_name xxx.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /apply/demo;
index index.html index.htm;
ssl_certificate xxx.pem;
ssl_certificate_key xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 443 ssl;
server_name mgt.xxx.com;
location / {
proxy_pass http://127.0.0.1:6666;
proxy_set_header Host $host;
proxy_set_header x-forwarded-for $remote_addr;
}
}
server {
listen 443 ssl;
server_name mgt.xxx.com;
ssl_certificate mgt.xxx.pem;
ssl_certificate_key mgt.xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header x-forwarded-for $remote_addr;
}
}
include ../blocksip.conf;
}