nginx本地配置https

本文详细介绍了在Windows 10系统中如何使用Nginx配置本地项目的HTTPS服务。首先通过Chocolatey安装所需工具,接着使用mkcert创建并安装本地可信证书,最后对Nginx配置文件进行编辑,包括设置443端口监听、SSL证书路径等,实现HTTPS强制跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WIN10环境Nginx配置本地项目HTTPS

安装chocolatey

  1. 管理员身份打开cmd

  2. 在cmd窗口运行以下命令

   @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" 
  1. 验证是否安装成功(显示版本号则成功)

     choco 
    

安装mkcert

  1. 使用chocolatey安装

choco install mkcert
  1. 添加环境变量

    我的电脑->属性->高级系统设置->环境变量->系统变量->Path->新建->输入mkcert地址(mkcert.exe所在地址。具体看安装目录。)

    C:\ProgramData\chocolatey\lib\mkcert\tools
    
  2. 验证是否安装完成

     mkcert
    
  3. 使用mkcert安装本地系统信任

    mkcert -install
    
  4. 使用mkcert创建证书

    mkcert local.tp5.com(证书名称)
    

Nginx 配置(443端口及指定证书路径)

编辑nginx.conf

如果使用了nignx.conf 使用了include /etc/nginx/conf.d/*.conf; 则去修改相应的xxx.conf配置文件
server{
    listen 80; #监听80端口
    listen [::]:80;

    server_name  local.tp5.com; #域名

    root /www/tp5/public; #网站跟目录
    index index.html index.php index.htm;

    # return 301 https://$host/shengji.html;
    return 301 https://$host$request_uri; #强制跳转到https

    
    location /reader {
        if ($http_user_agent ~* "Baiduspider|360Spider|bingbot|Googlebot|Sogou web spider") {
            return 301 https://$host;
        }
    }
    #php设置
    location ~ \.php$ {
        set $script $uri;
        set $path_info "";
        if ($uri ~ "^(.+\.php)(/.+)") {
            set $script $1;
            set $path_info $2;
        }
        fastcgi_pass php73:9000;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 6 512k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_index index.php?IF_REWRITE=1;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $script;
        fastcgi_read_timeout 10000;
        include fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires      30d;
    }

    location ~ .*\.(js|css|txt)?$ {
        expires      12h;
    }

    location ~ /\. {
        deny all;
    }
}

server{
    listen 443 ssl;
    listen [::]:443;
    server_name  local.tp5.com;

    root /www/tp5/public;
    index index.html index.php index.htm;

    #return 301 https://$host/shengji.html;
    #return 301 https://$host$request_uri;
    ssl on;
    ssl_certificate /etc/nginx/conf.d/cert/local.tp5.com.pem;  #letsencrypt证书路径,
    ssl_certificate_key /etc/nginx/conf.d/cert/local.tp5.com-key.pem; #letsencrypt秘钥路径,
    

    location ~ \.php$ {
        set $script $uri;
        set $path_info "";
        if ($uri ~ "^(.+\.php)(/.+)") {
            set $script $1;
            set $path_info $2;
        }
        fastcgi_pass php73:9000;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 6 512k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_index index.php?IF_REWRITE=1;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $script;
        fastcgi_read_timeout 10000;
        include fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires      30d;
    }

    location ~ .*\.(js|css|txt)?$ {
        expires      12h;
    }

    location ~ /\. {
        deny all;
    }

    
}
<think>嗯,用户想知道如何在Nginx中同时为主域名和子域名配置HTTPS。首先,我需要回忆一下Nginx配置HTTPS的基本步骤,比如需要SSL证书、配置server块等等。主域名和子域名可能涉及到多个server块,每个块监听不同的域名。 首先,用户可能需要为每个域名申请SSL证书。主域名比如example.com,子域名比如sub.example.com。每个证书可能需要单独的证书文件,或者使用通配符证书。如果是通配符证书,*.example.com可以覆盖所有子域名,这样可能更方便。不过用户可能没有通配符证书,所以可能需要分别配置。 然后,Nginx配置文件中需要为每个域名设置server块,监听443端口,并指定各自的SSL证书和密钥路径。每个server块中的server_name要分别设置为主域名和子域名。这样当请求到达时,Nginx会根据server_name来匹配对应的配置。 另外,可能还需要处理HTTP到HTTPS的重定向,即监听80端口的请求,并返回301重定向到HTTPS的对应域名。这时候每个server块里的重定向需要正确指向各自的HTTPS地址,避免循环或者错误的重定向。 还要注意SSL的配置参数,比如协议版本、加密套件等,确保安全性和兼容性。可能还需要配置HSTS,强制浏览器使用HTTPS连接。 用户可能遇到的问题包括证书路径错误、权限问题、配置语法错误导致Nginx无法重启,或者证书不匹配导致浏览器警告。需要检查Nginx的error日志来排查这些问题。 另外,如果用户有多个子域名,可能需要考虑使用通配符证书来简化配置,否则每个子域名都需要单独的证书,管理起来比较麻烦。但通配符证书可能需要更高的成本或者不同的申请流程。 最后,配置完成后,用户需要用nginx -t测试配置是否正确,然后重新加载配置使更改生效。之后通过浏览器访问主域名和子域名,确认HTTPS正常工作,没有证书错误,并且内容正确显示。 可能还需要引用站内的相关参考资料,比如引用[2]提到配置多个域名含二级域名的情况,引用[5]展示了两个域名的SSL证书路径配置,这些都可以作为参考。确保每个server块正确指定证书路径和域名,避免混淆。</think>### Nginx 中同时为主域名和子域名配置 HTTPS 的步骤 #### 1. **准备 SSL 证书** - **主域名**(如 `example.com`)和**子域名**(如 `sub.example.com`)需要各自的 SSL 证书。 - 可通过免费证书(如 Let's Encrypt)或购买商业证书获取。若使用通配符证书(如 `*.example.com`),可覆盖所有子域名[^5]。 #### 2. **证书文件存放** 假设证书文件路径如下: - 主域名证书:`/etc/nginx/cert/main/fullchain.pem` - 主域名私钥:`/etc/nginx/cert/main/privkey.pem` - 子域名证书:`/etc/nginx/cert/sub/fullchain.pem` - 子域名私钥:`/etc/nginx/cert/sub/privkey.pem` #### 3. **配置 NginxHTTPS 服务** 在 `nginx.conf` 或站点配置文件中添加以下内容: ```nginx # 主域名配置 server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/cert/main/fullchain.pem; ssl_certificate_key /etc/nginx/cert/main/privkey.pem; # SSL 通用优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 其他配置(如反向代理、静态资源路径) location / { root /var/www/main; index index.html; } } # 子域名配置 server { listen 443 ssl; server_name sub.example.com; ssl_certificate /etc/nginx/cert/sub/fullchain.pem; ssl_certificate_key /etc/nginx/cert/sub/privkey.pem; # SSL 通用优化配置(同上) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 其他配置 location / { proxy_pass http://localhost:8080; # 示例:反向代理到本地端口 } } # HTTP 强制跳转 HTTPS server { listen 80; server_name example.com sub.example.com; return 301 https://$host$request_uri; # 自动跳转到 HTTPS } ``` #### 4. **验证与重启 Nginx** ```bash nginx -t # 检查配置语法 systemctl reload nginx # 重新加载配置 ``` #### 5. **常见问题排查** - **证书路径错误**:查看 Nginx 错误日志 `tail -f /var/log/nginx/error.log`。 - **域名不匹配**:确保 `server_name` 与证书的域名一致[^2]。 - **端口冲突**:检查是否有其他服务占用 443 或 80 端口。 --- ### 相关问题 1. **如何申请免费的 SSL 证书(如 Let's Encrypt)?** 2. **通配符证书和单域名证书有什么区别?** 3. **Nginx 配置 HTTPS 时如何优化 SSL 性能?** --- ### 引用说明 [^1]: 若出现证书问题或域名未备案提示,需检查证书配置或联系域名服务商。 : 多域名配置需为每个域名单独设置 `server` 块并指定证书路径。 : 证书路径需在 `ssl_certificate` 和 `ssl_certificate_key` 中正确声明。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值