
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个强化的nginx 镜像,基于deb.myguard.nl的nginx-full包构建:支持HTTP/3/QUIC,包含大量动态模块集(ModSecurity、PageSpeed、Brotli、zstd、Lua、GeoIP、VTS、njs等),ModSecurity-CRS,以及由包本身提供的SSL-Labs-A++级别的默认nginx.conf配置。可选捆绑PHP-FPM(单版本或多版本),实现一体化Web+PHP容器。
是的,这是另一个Nginx镜像。但它没有使用完整的权限集和2014年的旧配置。它启动时会先测试自身配置,明确告诉你启动失败的原因,而不是在凌晨3点默默重启循环。不用谢。
两个名称指向相同的镜像 — eilandert/nginx(当前)和旧版eilandert/nginx-modsecurity3-pagespeed(仍在发布,因为破坏他人的docker-compose.yml是不礼貌的)。Debian标签前缀为deb-;Ubuntu标签没有前缀。
| 标签 | 基础系统 | PHP |
|---|---|---|
latest / deb-latest | Ubuntu (滚动更新) / Debian (trixie) | 无 |
php8.5 / deb-php8.5 | Ubuntu / Debian | PHP-FPM 8.5 |
php8.4 … php5.6 (+ deb-前缀) | Ubuntu / Debian | 相应PHP版本 |
multi / deb-multi | Ubuntu / Debian | 多版本PHP-FPM(通过PHPxx=YES选择) |
是的,php5.6存在。我们不会讨论你的选择。它是为那些你发誓"下个季度"会重写的遗留应用准备的。
nginx-full 来自deb.myguard.nl — HTTP/3/QUIC,完整动态模块集,ModSecurity v3 + OWASP CRS,PageSpeed。与brotli、zstd、geoip-bin、LuaJIT/lua-resty堆栈、fcgiwrap、modsecurity-crs一起安装。nginx.conf(仅TLS 1.3/1.2 AEAD,OCSP-ready,HTTP/2+3优化,slowloris超时设置,server_tokens off,gzip)和snippets/(ssl-labs-aplus.conf,security.conf,cloudflare.conf,proxy.conf,cache-key-normalize.conf,wordpress-example.conf等)。此镜像不捆绑自己的代码片段 — 包已经做好了这些工作。docker run后访问:443即可。浏览器会抱怨证书;这是证书正常工作的表现,不是需要提交的bug。MALLOC(默认jemalloc,可选mimalloc,none)。bootstrap.sh)/etc/nginx.orig复制到(可能是空的)/etc/nginx,并将/etc/modsecurity.orig复制到/etc/modsecurity。已存在的配置会被保留 — 不会覆盖你的工作。mime.types、scripts/、snippets/、modules-available/,然后运行scripts/reorder-modules.sh。:443立即响应。NGX_MODULES,则加载所有模块 — 较慢,是发现哪些模块需要配置的好方法。它会警告并禁用mod-http-lua/mod-stream-lua(它们需要手动配置)。设置NGX_MODULES 只加载你使用的模块。touch /etc/nginx/modules-enabled/.quiet可以保留所有模块并消除警告。nginx -t。配置错误 → 明确的错误信息和干净的exit 1。没有神秘的重启循环,无需猜测,不会出现"在我机器上能运行"的情况。nginx -t,如果配置损坏则跳过重载 — 不会因为你在挂载文件中输错一个分号而搞垮你的生产环境。MALLOC设置LD_PRELOAD,然后exec nginx -g 'daemon off;'。| 变量 | 用途 |
|---|---|
TZ | 容器时区(例如 Europe/Amsterdam) |
MALLOC | jemalloc(默认),mimalloc,或 none |
NGX_MODULES(或 MODULES) | 逗号分隔的要启用的模块;未设置 = 所有模块(不建议) |
PHPVERSION | 在PHP镜像上设置;在多版本镜像上为MULTI |
MODE | FPM(单版本)或 MULTI |
PHP56/PHP74/PHP80/PHP81/PHP82/PHP83/PHP84/PHP85 | 在multi镜像上设为YES以启动相应PHP-FPM |
shcurl -fsSLO https://raw.githubusercontent.com/eilandert/dockerized/master/src/nginx/docker-compose.yml $EDITOR docker-compose.yml # 设置NGX_MODULES、挂载点、TZ — 阅读它,不要只是复制粘贴 docker compose up -d
docker-compose.ymlyamlservices: nginx: container_name: nginx image: docker.io/eilandert/nginx:deb-latest stop_grace_period: 3s restart: always ports: - 80:80 - 443:443 - 443:443/udp # HTTP/3 / QUIC # ---- 安全强化:主进程是root(端口绑定+工作进程生成),因此只需要少量 # 必要的capabilities,而不是默认的全部 ---- security_opt: - no-new-privileges:true cap_drop: [ALL] cap_add: [NET_BIND_SERVICE, SETUID, SETGID, CHOWN, DAC_OVERRIDE] ulimits: nofile: { soft: 65535, hard: 65535 } # 匹配worker_rlimit_nofile volumes: - ./config/nginx:/etc/nginx:rw # - ./config/modsecurity/:/etc/modsecurity:rw # - ./cache/nginx:/var/cache/nginx:rw # 如果使用PHP标签: # - ./config/php:/etc/php:rw # - ./config/nullmailer:/etc/nullmailer:rw # 与letsencrypt容器一起使用: # - ./letsencrypt/certs:/etc/letsencrypt:ro # - ./letsencrypt/html:/var/www/html:ro environment: - TZ=Europe/Amsterdam - MALLOC=jemalloc # jemalloc (默认) | mimalloc | none # 只启用你使用的模块(完整列表:deb.myguard.nl/nginx-modules/) - NGX_MODULES=mod-security-headers,mod-http-fancyindex # 如果使用:multi标签,选择PHP版本: # - PHP56=YES # - PHP74=YES # - PHP80=YES # - PHP82=YES # - PHP84=YES # - PHP85=YES
可启用的模块包括mod-http-brotli、mod-http-cache-purge、mod-http-dav-ext、mod-http-doh、mod-http-fancyindex、mod-http-geoip2、mod-http-headers-more-filter、mod-http-image-filter、mod-http-lua、mod-http-njs、mod-http-subs-filter、mod-modsecurity、mod-nchan、mod-pagespeed、mod-rtmp、mod-security-headers、mod-vts、mod-stream — 完整列表见<[***]>。
因为"它在防火墙后面"不是一种安全模型。
signed-by GPG验证**(密钥环随基础镜像提供 — 没有trusted=yes,没有设计上的MITM漏洞)。www-data;配置目录为root:www-data,组写权限已剥离;可写目录预创建为0750;此层中所有setuid/setgid位均已剥离。server_tokens off;隐藏上游X-Powered-By/X-Generator头 — ***者需要费力才能识别你的系统。444("我甚至不屑于给那个请求一个状态行"响应)。no-new-privileges,cap_drop: [ALL],只保留nginx实际需要的五个capabilities。在此容器或上游代理终止TLS;包的ssl-labs-aplus.conf片段+HSTS假设仅使用HTTPS。如果在生产环境中通过纯HTTP提供服务,那是你和你的事件报告之间的事。
Dockerfile由.generate.sh从Dockerfile.template生成(每个PHP版本×{Debian, Ubuntu}+基础+多版本各一个)。编辑模板,不要编辑生成的Dockerfile-* — 它们会被覆盖,你的"快速修复"也会随之丢失。通过仓库根目录的docker-bake.hcl(nginx组)构建/标记镜像。构建时注入来源标签:
shVCS_REF=$(git rev-parse --short HEAD) \ BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \ docker buildx bake nginx --push
以下是 eilandert/nginx 相关的常用 Docker 镜像,适用于 反向代理、负载均衡、静态资源服务 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

来自真实用户的反馈,见证轩辕镜像的优质服务