Nginx同域名部署Laravel与QGIS Server时/qgisserver路径404如何解决
问题原因
配置失效的核心原因是:Nginx 对相同监听端口、相同server_name的多个server块,只会加载最先读取到的块作为默认请求处理块,其余同匹配规则的server块不会参与请求匹配。你单独为QGIS Server写的虚拟主机和Laravel虚拟主机完全同监听80端口、同绑定121.123.124.124这个IP,Nginx实际只会用Laravel的server块处理所有请求,你写的/qgisserver匹配规则根本没有被加载,请求最终走到Laravel的路由兜底逻辑,返回Laravel的404页面。
另外你原来的QGIS location配置缺少必要的fastcgi脚本路径参数,就算规则被加载也无法正常转发请求到QGIS服务。
配置步骤
- 第一步:删除独立的QGIS Server虚拟主机软链接,避免配置冲突
sudo rm /etc/nginx/sites-enabled/你之前创建的qgis server配置文件名
- 第二步:编辑原有Laravel对应的Nginx虚拟主机配置文件,在
location /规则之前添加QGIS Server的匹配规则,补全必要的fastcgi参数。
修改后的完整配置参考如下:
server { listen 80; server_name 121.123.124.124; root /var/www/html/laravel-app/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; # QGIS Server 规则放在最前面,优先级高于通用路径匹配 location ~ ^/qgisserver(/.*)?$ { gzip off; include fastcgi_params; fastcgi_pass unix:/var/run/qgisserver.socket; # 指定QGIS Server的fcgi执行脚本路径,按你实际安装路径调整 fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/qgis_mapserv.fcgi; fastcgi_param PATH_INFO $1; # 如有自定义QGIS项目路径,可在这里追加参数,例如 # fastcgi_param QGIS_SERVER_PROJECTS_DIRECTORY /data/qgis/projects; } location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\.(?!well-known).* { deny all; } }
注意:配置里的
/usr/lib/cgi-bin/qgis_mapserv.fcgi是QGIS Server默认安装的fcgi脚本路径,如果你的安装路径不同,替换成实际路径即可。
- 第三步:校验配置并重载Nginx
# 校验配置语法,无报错再执行重载 sudo nginx -t # 重载Nginx使配置生效 sudo systemctl reload nginx
验证方法
浏览器访问http://121.123.124.124/qgisserver?SERVICE=WMS&REQUEST=GetCapabilities,如果返回XML格式的WMS服务能力文档,说明QGIS服务配置正常;根路径访问Laravel应用无异常即满足同端口共存需求。
内容的提问来源于stack exchange,提问作者watkib
相关产品推荐
相关产品推荐

