我在配置从主域的/ api / segment运行的laravel配置时遇到问题。 想法是在subdomain.domain.com主要的Angular应用程序和subdomain.domain.com/api/ laravel php服务器配置中提供服务。
更新#1
我已经设法使用此配置从/ api / segment运行laravel
server {
listen 80;
server_name subdomain.domain.com;
root /var/www/subdomain.domain.com/client/monkey/dist;
access_log /var/www/subdomain.domain.com.access.log;
error_log /var/www/subdomain.domain.com.error.log;
rewrite_log on;
index index.php index.html;
location / {
root /var/www/subdomain.domain.com/client/monkey/dist;
index index.html;
if (!-e $request_filename){ # handles page reload
rewrite ^(.*)$ /index.html break;
}
}
location /api/ {
root /var/www/subdomain.domain.com/server/;
try_files $uri $uri/ /api/index.php$is_args$args;
}
location ~ /api/.+\.php$ {
root /var/www/subdomain.domain.com/server/;
rewrite ^/api/(.*)$ /$1 break;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_param MONKEY_ENV production;
fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
# fastcgi_split_path_info ^(.+\.php)(.*)$;
}
}
唯一的问题是,当我使用subdomain.domain.com/api/segment1/segment ...然后我需要添加routes.php
Route::group(['prefix' => 'api'], function () {
// my routes settings
});
由于laravel以suddomain.domain.com/作为根路径启动。我怎样才能重写/ api /以便laravel将/ api /作为路由起点?
答案 0 :(得分:1)
如果我能够解决您的问题,我想您可以使用 别名指令而不是 root 解决此问题。使用 root 指令,Nginx只需知道位置并在知情根路径的末尾连接它。
所以,在你的情况下,这个conf:
location /api/ {
root /var/www/subdomain.domain.com/server/;
try_files $uri $uri/ /api/index.php$is_args$args;
}
nginx会将其解析为/var/www/subdomain.domain.com/server/api
作为最终路径。
使用 别名 指令,此conf,
location /api {
alias /var/www/subdomain.domain.com/server/;
try_files $uri $uri/ /api/index.php$is_args$args;
}
将解决任何针对' / api'但是nginx没有连接' api'字符串在它使用的最终路径中。
http://nginx.org/en/docs/http/ngx_http_core_module.html#alias
希望这会有所帮助。