我有一个域名,假设为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服务。
/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文件。
location /php
/data/wwwroot
try_files
/php/index.php
http://www.example.com/php
/data/wwwroot/php/index.php