一、实现域名 https 协议访问(虚拟机模拟linux服务器)
准备虚拟机:192.168.76.100
准备测试域名:www.bbb.com
注意:在测试环境中可以使用虚拟机或者本地电脑生成测试证书,在生产环境中必须要在 https 证书厂商注册
1. 生成证书和秘钥文件
cd /usr/local/nginx/conf
mkdir ssl
cd ssl
控制台依次输入:
openssl genrsa -out bbb.key 2048
openssl req -new -key bbb.key -out bbb.csr
openssl x509 -req -days 365 -sha256 -in bbb.csr -signkey bbb.key -out bbb.crt
2. 修改 nginx.conf 配置文件
- 为测试域名配置 https 证书,使用 http协议访问自动重写成 https 协议
vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name www.bbb.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
root html/bbb; #网页根目录(/usr/local/nginx/html/bbb/)
index index.html index.htm;
}
ssl_certificate /usr/local/nginx/conf/ssl/bbb.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/bbb.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers
"EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
}
server{
listen 80;
server_name www.bbb.com;
rewrite ^(.*)$ https://www.bbb.com permanent; # http重写成https
root html/bbb; #网页根目录(/usr/local/nginx/html/bbb/)
index index.html index.htm;
}
3. 重新加载配置文件
/usr/local/nginx/sbin/nginx –s reload
4. 客户端测试
- 打开 C:\Windows\System32\drivers\etc\hosts 配置本地域名解析
192.168.76.100 www.bbb.com
- 更新本地DNS数据库,使用cmd终端,输入
ipconfig/flushdns
- 在客户端浏览器访问
http://www.bbb.com
https://www.bbb.com
- 注意清空浏览器缓存
5. 如果不生效
-
查看 nginx 错误日志
more /usr/local/nginx/logs/error.log
发现:[emerg] 1339#0: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:47
错误原因是:Nginx 未开启 SSL 模块 -
安装 nginx 时,需要将--with-http_ssl_module 模块开启,如果未开启则需要手动开启
-
手动开启 --with-http_ssl_module 模块
首先,进入源码包
cd /usr/local/nginx/nginx-1.22.0
然后,编译(注意:这里不要进行make install,否则就是覆盖安装)
./configure --with-http_stub_status_module --with-http_ssl_module
make
最后,暂停 nginx 服务,将刚生成的配置覆盖原来的配置,并重启 nginx
/usr/local/nginx/sbin/nginx -s stop
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp ./objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx
- 重新进行客户端测试
二、 实现域名 https 协议访问(阿里云购买真实域名和https证书)
1. 购买二手域名
搜索里输入:域名 --> 点击域名交易 --> 可进行后缀和价格限制 -->选中要购买的域名支付即可,比如
www.greenpray.com
点击控制台 --> 域名 --> 域名列表,选中指定域名 --> 点击解析,将域名解析到指定到服务器的外网 ip 地址
2. 依赖当前域名,购买 https 证书
搜索里输入:https --> 点击管理控制台 --> 点击 SSL 证书--> 点击免费证书 -->创建证书,域名填写
www.greenpray.com
点击下载 --> 可选择不同环境 nginx 或者 apache --> 点击帮助:可查看不同环境下的配置操作
点击下载 --> 下载 nginx 版本的 https 证书文件:
9062163_www.greenpray.com.key
9062163_www.greenpray.com.pem
3. 在服务器中配置
- 将证书文件拷贝到 /usr/local/nginx/conf/ssl
- 编辑 nginx.conf 配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name www.greenpray.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
root html; #网页根目录(/usr/local/nginx/html)
index index.html index.htm;
}
ssl_certificate /usr/local/nginx/conf/ssl/9062163_www.greenpray.com.pem;
ssl_certificate_key /usr/local/nginx/conf/ssl/9062163_www.greenpray.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers
"EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
}
server{
listen 80;
server_name www.greenpray.com;
rewrite ^(.*)$ https://www.greenpray.com permanent; # http重写成https
root html; #网页根目录(/usr/local/nginx/html/)
index index.html index.htm;
}
3. 在客户端浏览器上测试
https://www.greenpray.com
三、注意
1. 域名解析范围说明
- DNS 域名解析的 ip 是本地电脑的虚拟机 ip:在虚拟机所在客户端是可以访问的,但是在互联网上则不行,因为虚拟机不是对外的
- DNS 域名解析的 ip 是 WLAN 即 wifi 的 ip:在同一 wifi 下的电脑和手机都可访问,但是在互联网上则不行,因为 wifi 有范围限制
- DNS 域名解析的 ip 是真实服务器的 ip:可以在互联网上自由访问,注意配置防火墙的出站端口,即:dns域名解析服务器的外网ip,通过域名可以生成https证书,再在服务器上通过nginx配置域名和https协议
2. 本地解析和互联网解析
- 我们可以在本地电脑的hosts文件中配置自定义域名,也可以通过本机电脑生成https证书,但是只是局限在本地电脑上实用
- 在阿里云购买域名,配置完域名解析ip,再购买免费的https证书指定到购买的域名,这样既可以在本地电脑也可在互联网上使用
网友评论