已复制
全屏展示
复制代码

局域网内nginx配置https访问

· 2 min read

letsencrypt 的使用场景通常是有外网的时候,如果安装的 nginx 不能访问外网,同时也不能被外网访问,只能在内网发布,这时候 letsencrypt 就无法安装了,此时使用 openssl 手动生成证书可以解决此问题。

  • 安装 nginx
# 安装nginx
apt install nginx
vim /etc/nginx/conf.d/test.conf
server {
    listen 80;
    server_name www.test.com;
    root /var/www/html;
    index index.html
    client_max_body_size 1g;
}
echo ok > /var/www/html/index.html

# 重启 nginx 后确保能通过浏览器正常访问,并返回ok
sudo systemctl restart nginx
  • openssl 创建证书
# 使用openssl交互式方式创建证书
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout www.test.com.key -out www.test.com.crt

# 除了如下要写配置的域名外,其他的都直接回车
Common Name (e.g. server FQDN or YOUR name) []:www.test.com

# 拷贝到nginx配置目录
cp www.test.com.crt /etc/nginx/
cp www.test.com.key /etc/nginx/
  • nginx 配置证书
vim /etc/nginx/conf.d/test.conf 

server {
    listen 443 ssl;
    server_name www.test.com;
    root /var/www/html;
    index index.html;
    ssl_certificate /etc/nginx/www.test.com.crt;
    ssl_certificate_key /etc/nginx/www.test.com.key;
}
// http 重定向到 https
server {
    listen 80;
    server_name www.test.com;
    if ($host = www.test.com) {
        return 301 https://$host$request_uri;
    }
    return 404;
}

# 禁止 http://IP 访问
server {
    listen 80 default_server;
    server_name _;
    return 403;
}
# 禁止 https://IP 访问
server {
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /etc/nginx/www.test.com.crt;
    ssl_certificate_key /etc/nginx/www.test.com.key;
    return 403;
}

# 重启nginx
systemctl restart nginx
  • 浏览器配置证书mac:将/etc/nginx/www.test.com.crt下载到mac上,双击该文件安装证书,并配置全部信任(在钥匙串配置)
  • 浏览器配置证书windows:不需要配置
  • macOS 解决 Chrome NET::ERR_CERT_INVALID的问题
    在较新的 Chrome 版本中,访问不受信任的 HTTPS 网站时,会提示如下的提示,并且点击高级按钮也没有继续前往的链接。
    提供一个简便的方法:
    随便点击页面的空白处,然后输入:thisisunsafe
    页面就可以打开了,很神奇。
🔗

文章推荐