1、需求背景:
我是一个轻微强迫症,抖音小红书有小红点必点,同样的,天天接触的浏览器有红色感叹号也会很不得劲。
之前一直在自己的服务器线上开发,但每次写完PHP代码,都要上传到远程服务器一下,挺麻烦,所以还是改回本地开发了,这下谷歌搜索栏提示的红色感叹号我就受不了了。
2、安装 mkcert【在macbook执行,不在docker容器里执行】
brew install mkcert
注:如果没有brew,执行这个命令
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
3、初始化本地 CA【在macbook执行,不在docker容器里执行】
mkcert -install
此命令会在系统信任存储中安装本地根证书,后续生成的证书将自动被浏览器信任
4、生成证书【在主机执行,不在docker容器里执行】
mkcert test localhost 127.0.0.1 ::1
注:为了测试方便,我本地测试站点的域名就是test,不是www.test.com这种,你需要替换为自己的本地测试域名
支持同时为域名、IP 和通配符生成证书(如 *.test.com),生成的文件包含 .pem(证书)和 -key.pem(私钥)
5、Nginx 配置示例【在 docker nginx容器 或 openresty容器里配置】
server {
listen 80;
server_name test;
# HTTP 重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name test;
# SSL 证书配置
ssl_certificate /usr/local/openresty/nginx/cert/test+3.pem;
ssl_certificate_key /usr/local/openresty/nginx/cert/test+3-key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 基础参数
charset utf-8;
root /data/test;
index index.html index.php;
error_log /usr/local/openresty/nginx/logs/error-test.log error;
# 重定向控制
server_name_in_redirect off;
absolute_redirect off;
# 主location规则
location / {
try_files $uri $uri/ @phpfallback;
}
# PHP处理(安全增强版)
location ~ \.php$ {
fastcgi_pass php84:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# 安全限制
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
try_files $uri =404; # 防止任意文件执行
}
location @phpfallback {
rewrite ^ /index.php?$query_string last;
}
# 静态资源优化
location ~* \.(js|css|png|ico)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
}
# 安全防护
location ~ /\.(?!well-known) {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
注:在你通过docker run创建容器时,应该通过-v指定映射目录了吧,把在macbook得到的证书和私钥复制或移动到当初指定的macbook的映射目录里,然后进入docker容器后,通过cp命令可以将证书移动搭配nginx配置文件指定的路径下
6、浏览器缓存清除
Chrome访问:
chrome://net-internals/#hsts
在"Delete domain"输入test执行删除
7、重启主机
我配置时,就遇到了curl 可以正常返回结果,但是谷歌浏览器访问就会无法访问的问题,重启一下好了
另外,如果你突然访问网站访问不了了,那先检查是否把代理软件打开了,其次检查容器状态是否正常,拿nginx容器和php容器为例,再打开nginx容器前,必须打开其配置文件里相关联的php容器,否则nginx容器就可能起不起来
8、关于代理软件的设置
很多时候,我们开发的同时会将代理软件打开,但是众所周知代理软件一开,本地的环境就没办法访问了,所以如果使用代理软件,也要设置一下。以clash x为例,