我有一个域名,假设为example.com,后端nginx已经代理了一个tomcat,代理域名是http://www.example.com/,会跳转到tomcat服务,目前这是正常的。
现在我想再增加一个php服务,在同一个服务器上,用同一个nginx代理,url路径为“http://www.example.com/php”,访问到/data/wwwroot/php下的php代码。
但是,访问http://www.example.com/php的时候会转发的tomcat服务上面,提示“HTTP状态 404 - 未找到”,后缀显示是Apache Tomcat服务。
所以我怀疑代理没有生效,当我将php代理的域名换成其他的时候,比如php.example.com,代理是成功的,但是我不想遇到跨域的问题。请问php应该怎么设置才行
这是nginx代理tomcat的配置
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
proxy_set_header X-Host $host:$server_port;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
这是nginx代理php的配置,这里不正常
server {
listen 80;
server_name www.example.com;
location /php {
try_files $uri $uri/ /index.php$is_args$args;
alias /data/wwwroot/php;
index index.php index.htm index.html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
try_files 指令最后一个参数似乎会重走一遍匹配,当重走匹配的时候由于已经不带 /php 前缀,所以会匹配到tomcat里面,
建议把 location ~ .php$ 这个 匹配放到外面,和 /php 同级别。
这样当 重走匹配的时候 由于带 .php 后缀,就会匹配到 ~ .php$ 里面
location /php {
proxy_pass php服务地址;
}
如上是最简单的配置,可以按此思路试试。