如何将IIS的URL重写规则迁移至Docker环境下的NGINX
IIS重写规则转Docker环境Nginx配置方案
以下是完全匹配你原IIS规则逻辑的Nginx配置:
server { listen 80; server_name example.com; # 虚拟目录/we映射到容器内代码目录 location /we { alias /var/app/we; # 优先访问真实文件/目录,不存在则触发重写 try_files $uri $uri/ @frontend_controller; } # 处理根路径下的请求(如你的示例/sub1/test.cfm) location / { try_files $uri $uri/ @frontend_controller; } # 前端控制器重写逻辑 location @frontend_controller { # 匹配排除路径,直接跳过重写(按实际路径存在情况调整) if ($request_uri ~* ^/(flex2gateway|jrunscripts|cfide|cfformgateway|railo-context|files|images|javascripts|miscellaneous|stylesheets|rewrite.cfm|index.cfm)) { return 404; # 若这些路径实际在/we目录下,替换为:rewrite ^(.*)$ /we$1 last; } # 执行重写,传递path_info参数,自动保留原查询字符串 rewrite ^(.*)$ /we/index.cfm?path_info=$1 last; } }
配置细节说明
- 虚拟目录映射:
location /we通过alias绑定到/var/app/we,确保/we路径下的静态文件能直接访问容器内的代码文件。 - 文件存在性校验:
try_files指令先尝试加载请求的文件或目录,只有当文件不存在时才触发重写,对应IIS规则中IsFile negate=true的条件。 - 排除路径处理:通过正则匹配IIS规则指定的排除路径,匹配到的请求不执行重写逻辑。
- 重写逻辑:
rewrite指令将符合条件的请求转发到/we/index.cfm,把原请求完整路径作为path_info参数传递,Nginx默认保留原查询字符串,对应IIS的appendQueryString=true。
Docker环境额外注意事项
- 确保在
docker-compose.yml或启动命令中正确挂载本地代码目录到容器:volumes: - ./本地we代码目录:/var/app/we - 检查容器对挂载目录的读写权限,避免因权限不足导致文件无法读取。
- 若使用自定义Nginx镜像,需将上述配置文件复制到容器内的
/etc/nginx/conf.d/目录下。
内容的提问来源于stack exchange,提问作者Puc Covelli
相关产品推荐
相关产品推荐

