我有一个域名,假设为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;
}
}
}
根据你提供的配置,出现问题的可能原因是nginx的location匹配规则导致请求被误导到了错误的地方。在第二个server块中的location配置中,匹配的是以/php
开头的URL路径,但这样配置会导致请求http://www.example.com/php被错误地匹配到了这个location块,而实际上你希望它被代理到php服务。
为了解决这个问题,你可以调整nginx的配置,使得URL路径为/php
的请求被正确地代理到php服务。下面是一种可能的解决方案:
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";
}
location /php {
try_files $uri $uri/ /php/index.php$is_args$args;
root /data/wwwroot; # 修改根目录为上层目录
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;
}
}
}
在这个配置中,我修改了location /php
的配置,将根目录调整为/data/wwwroot
,然后在try_files
指令中修改了索引文件的路径为/php/index.php
。这样,当请求http://www.example.com/php
时,nginx会正确地代理到/data/wwwroot/php/index.php
文件。