bounty还有2天到期。回答此问题可获得+100声望奖励。Frevelman正在为这个问题寻找一个更详细的答案。
我将我的angular前端和laravel后端部署到一个ubuntu虚拟机上,然后部署到一个nginx web服务器上。
现在前端工作正常,可以通过我的URL访问,但是后端API不工作-我得到404错误。
下面是我的nginx配置:
server {
listen 443 ssl;
server_name my_ip myurl.de www.myurl.de;
root /var/www/html/dist;
index index.html;
ssl_certificate /etc/nginx/cert.cer;
ssl_certificate_key /etc/nginx/prvt.key;
location / {
try_files $uri $uri/ /index.html;
}
location /3rdpartylicenses.txt {
alias /var/www/html/dist/3rdpartylicenses.txt;
}
location /assets {
alias /var/www/html/dist/assets;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /index.nginx-debian.html {
log_not_found off;
access_log off;
}
location ^~ /api {
root /backend/LeagueOf5v5Backend/public;
index index.php;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Adjust the PHP-FPM socket path if needed
}
location ~ /\.ht {
deny all;
}
error_page 404 /index.html;
# Additional Nginx configuration settings can go here.
}
我试着通过https://nginx.viraptor.info测试它,它返回了/API前缀的测试结果。
但是使用 Postman 和URL我得到404错误。但是当我在我的本地机器上,通过localhost:8000/API/用post man测试它时.它工作正常。
任何帮助感谢!
编辑:这是一个既适用于angular又适用于laravel的配置文件,
6条答案
按热度按时间2w3rbyxf1#
这是我的Docker compose gninx配置:
当然,你使用的是socket,我不是,所以忽略这个区别,但是我认为你用错了
location /
,你用/index.html
的时候应该像我一样。还可以看到你正在使用
index index.html
,它应该是index index.php
,因为你正在服务于Laravel。62o28rlo2#
@Frevelman的事情,我从你的
virtual host
代码中了解到,你想在点击<your-domain>/api
时调用后端Laravel
服务。根据你的指令,你的路由将遵循
<your-domain>/api/api/
,如果我没有错的话,你已经在api.php路由文件中定义了所有的路由。请尝试一下,我认为这将为您工作。
作为我的建议,将是一个更好的解决方案是在不同的端口上运行Laravel服务,即。8001等,这样您就可以通过
<domain>:8001/api
访问Laravel
服务。在端口上运行Laravel:
你可以像在上面的例子中那样在一个文件中编写这两个代码。你需要用它来更新你的配置文件。
通过这种配置。你将
myurl.de/
它将服务于Angular
应用程序,当你点击myurl.de:8001/
它将服务于web.php
中的Laravel
应用程序的路由,当你点击myurl.de:8001/api
它将服务于Laravelapi.php
路由文件。优点
1.两个应用程序将使用相同的SSL证书,因为两个应用程序的域/子域相同。我们只是使用端口转发将请求重定向到Angular或Laravel。
1.当请求到达
Angular
时,php-fpm将不会为其提供服务,内存负载将减少。lnvxswe23#
看起来你的Nginx配置试图从同一个服务器块同时服务Angular前端和Laravel后端。这可能导致配置冲突。要解决此问题,您可以将配置拆分为单独的服务器块,一个用于前端,另一个用于后端。
您可以尝试以下更新的配置。
确保将www.example.com替换api.myurl.de为Laravel后端所需的子域,并相应地更新DNS。完成这些更改后,重新启动Nginx以应用新配置:
nwlls2ji4#
在我看来是不对的
也
使nginx强制响应代码进入404,PHP无法覆盖它:(将其替换为
nginx将不再强制响应代码,它可以是PHP想要的任何代码,例如
HTTP 200 OK
的http_response_code(200);
顺便说一句,使用扩展名
.html
的php-scripts是一个奇怪的选择,php脚本通常通过扩展名.php
-如果我参与了你的项目,我会将其更改为.php
,我甚至会认为这是一个安全问题,因为我不希望我的.html文件执行.php脚本,如果它们碰巧包含字符串<?php
。nr9pn0ug5#
问题出在别的地方,不在你的nginx上。根据我以前的经验,有两个原因
1.可能是您的服务器阻止了同一个服务器请求。你应该为你的angular使用一个代理,如果请求是在服务器端,如果请求来自客户端,你应该纠正你的请求地址。如果请求来自客户端,请首先与Postman进行检查,并检查服务器的日志。
1.有时你应该把你的代理地址从localhost改为127.0.0.1:你的端口,在angular和Laravel中一起和单独尝试。不要忘记每次重启服务器。
ryoqjall6#
您仍然可以使用单个配置文件为两个应用程序提供服务。首先,您需要使用pm2启动
Angular
服务,例如在3000端口上。然后你应该把你的Laravel包文件夹作为根文件夹,并做代理设置,把你的位置指向
3000
端口。