Files
MES/reference/nginx-vhost-mes2.conf
2026-08-08 18:28:49 +08:00

143 lines
5.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# MES2 — Nginx 站点配置(宝塔 / Baota)【修正版】
# 域名:51chip.net 根目录:/www/wwwroot/mes2/
# PHP8.3enable-php-83.conf
# 本次修正:内联前端控制器重写(修复 /Admin/index 等 404),
# 并补齐原 Nginx 配置缺失的 Apache .htaccess 加固。
# 用法:宝塔「网站 → 51chip.net → 设置 → 配置文件」整体替换本内容。
# ============================================================
server {
listen 80;
listen 443 ssl ;
http2 on;
server_name 51chip.net www.51chip.net;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/mes2/;
#CERT-APPLY-CHECK--START
# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
include /www/server/panel/vhost/nginx/well-known/51chip.net.conf;
#CERT-APPLY-CHECK--END
include /www/server/panel/vhost/nginx/extension/51chip.net/*.conf;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
set $isRedcert 1;
if ($server_port != 443) {
set $isRedcert 2;
}
if ( $uri ~ /\.well-known/ ) {
set $isRedcert 1;
}
if ($isRedcert != 1) {
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/51chip.net/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/51chip.net/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_tickets on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#SECURITY-START 防盗链配置
location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {
expires 30d;
access_log /dev/null;
valid_referers www.51chip.net 51chip.net;
if ($invalid_referer){
return 404;
}
}
#SECURITY-END
#SECURITY-HEADERS-START
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
# 以下两项对齐原 Apache .htaccess 的安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# 注意:index.php 已在 PHP 端按请求动态生成带 nonce 的 CSP 头,
# 此处不再设置 Content-Security-Policy,避免与 PHP 端形成“双重 CSP 策略”冲突
# (与原 Apache .htaccess 的意图一致,原 .htaccess 已刻意移除静态 CSP)。
#SECURITY-HEADERS-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-83.conf;
#PHP-INFO-END
#REWRITE-START 前端控制器重写(修复 /Admin/index 等 404
# 原配置依赖外部伪静态文件 /www/server/panel/vhost/rewrite/51chip.net.conf
# 切换后该文件为空导致漂亮 URL 404。此处内联等效规则,不再依赖外部文件。
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
#REWRITE-END
# ===== 还原 Apache .htaccess 中、原 Nginx 配置缺失的加固 =====
# 禁止直接访问诊断/调试/安装/修复脚本(原 .htaccess <FilesMatch>
location ~* /(diag|debug_|verify_|php83_check|fix_db|fix_db_password|install|logintest|pwdtest|cachecheck|checkpath|check|hexcheck|dbcheck)\.php$ {
return 404;
}
# 禁止访问备份目录(原 .htaccess RewriteRule [F]
location ~ /(backups|_backup_)/ {
return 404;
}
# 上传文档目录:禁止执行任何脚本(原 static/uploads/documents/.htaccess
# ^~ 前缀优先级高于正则,确保该目录下的 .php 不会落入上面的 PHP 处理。
location ^~ /static/uploads/documents/ {
location ~ \.(php|phtml|php3|php4|php5|php7|phar|cgi|pl|py|jsp|asp|aspx|sh|exe|bat)$ {
return 403;
}
}
# 禁止访问的敏感文件(保留原配置,并补充 .md / .lock 以对齐 Apache
location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties)|\.md|\.lock)$
{
return 404;
}
# 禁止访问的敏感目录
location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
access_log /www/wwwlogs/51chip.net.log;
error_log /www/wwwlogs/51chip.net.error.log;
}