二级域名解析及nginx配置ssl

5,024 阅读3分钟

前言

本文将介解析二级域名并配置ssl证书,http 重定向 https 。 注意:一定要看完这篇文章才能开始,当安装出现一些报错时,看最下面的报错处理情况。

1. 解析域名

看下面一张图就行了。

2. ssl证书申请

解析很简单,我们接着申请ssl证书。

注册域名的时候申请免费的ssl证书,可以申请一个免费的二级域名证书,必须保持和上面的二级域名一致。

证书下载nginx ,我们会得到key和pem两个文件

3. 安装nginx

3.1 安装各种依赖

#gcc安装,nginx源码编译需要
yum install gcc-c++

#PCRE pcre-devel 安装,nginx 的 http 模块使用 pcre 来解析正则表达式
yum install -y pcre pcre-devel

#zlib安装,nginx 使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel

#OpenSSL 安装,强大的安全套接字层密码库,nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http)
yum install -y openssl openssl-devel

3.2 下载nginx源

直接官网下载【官网链接】

使用wget命令下载(推荐)

#下载版本号可根据目前官网最新稳定版自行调整 
wget -c https://nginx.org/download/nginx-1.16.1.tar.gz

#根目录使用ls命令可以看到下载的nginx压缩包,然后解压 
tar -zxvf nginx-1.16.1.tar.gz 
#解压后进入目录 
cd nginx-1.16.1

4. 配置ssl

安装时直接./configure是不会安装ssl模块的,需要加上 依次执行如下命令:

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

nginx的ssl配置

#进入nginx配置文件目录,找到nginx的配置文件nginx.conf
cd /usr/local/nginx/conf/

#直接修改
vi nginx.conf
server {
     listen  443 ssl;
     server_name  www.xxx.com;

   #  ssl on;

     ssl_certificate   /etc/ssl/certs/证书名.pem;
     ssl_certificate_key  /etc/ssl/certs/证书名.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_pass http://localhost:8080;
    }
}

证书一定要放在:/etc/ssl/certs/证书名.pem;不然会报错。

www.yy.xxx.com 为你的二级域名。

5. 配置域名映射

#进入nginx配置文件目录,找到nginx的配置文件nginx.conf
cd /usr/local/nginx/conf/

#直接修改
vi nginx.conf
 server {
        listen       80;
        server_name  www.yy.xxx.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        rewrite ^(.*)$  https://$host$1 permanent; #用于将http页面重定向到https页面

        location / {
            proxy_pass http://localhost:8080;
        }

6. 重新加载配置文件

#修改完成后,重新加载配置文件
cd /usr/local/nginx/sbin/
./nginx -s reload

7. 部分报错处理

警告:[warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/vhost/api.conf:16

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/vhost/api.conf:16

解决方法: ssl on 改为如下:

#listen 443; 修改该行信息,如下即可
listen 443 ssl; 
server_name xxx.xxxx.com; 
#ssl on; 注释该行信息

7.2 [error] open() "/usr/local/nginx/logs/nginx.pid" failed

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决方法:

#执行命令
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

使用nginx -c的参数指定nginx.conf文件的位置

如果出现:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

killall -9 nginx 杀掉nginx 进程 然后重启就行了。

另外 还有一个很重要的可能 ps -ef | grep nginx 看下主目录 是哪里 是不是装了两个可恶的 Nginx 哈哈nginx

8. 小结&参考资料

小结

这种方法的二级域名不用备案(前提一级域名已经备案),且具有ssl证书,使用真的很棒。

参考资料