Nginx/PHP-FPM use more than one webroot -
i'm faced problem nginx.
i'd distinct 2 cases:
first if request url matches /api/(*.) want return api/index.php
otherwise if url doesn't match it, public/index.php must returned.
i've tried several solutions, including:
someone explain me how achieve ?
thx :)
my files organised this:
/var/www/html | _ api | | | _ index.php | |_ public | _ index.php | _ js | _ index.js
here server configuration:
server { listen 80; server_name _; index index.php; rewrite_log on; location / { root /var/www/html/public; try_files $uri $uri/ /index.php$is_args$args; location ~ \.php { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } } location ^~ /api { root /var/www/html/api; try_files $uri $uri/ /index.php$is_args$args; error_log /var/log/nginx/admin-error.log debug; location ~ \.php { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } } }
content of snippets/fastcgi-php.conf:
# regex split $uri $fastcgi_script_name , $fastcgi_path fastcgi_split_path_info ^(.+\.php)(/.+)$; # check php script exists before passing try_files $fastcgi_script_name =404; # bypass fact try_files resets $fastcgi_path_info # see: http://trac.nginx.org/nginx/ticket/321 set $path_info $fastcgi_path_info; fastcgi_param path_info $path_info; fastcgi_index index.php; include fastcgi.conf;
and here admin-error.log file:
2017/08/14 18:53:31 [debug] 20331#20331: *75 http cl:-1 max:1048576 2017/08/14 18:53:31 [debug] 20331#20331: *75 rewrite phase: 3 2017/08/14 18:53:31 [debug] 20331#20331: *75 post rewrite phase: 4 2017/08/14 18:53:31 [debug] 20331#20331: *75 generic phase: 5 2017/08/14 18:53:31 [debug] 20331#20331: *75 generic phase: 6 2017/08/14 18:53:31 [debug] 20331#20331: *75 generic phase: 7 2017/08/14 18:53:31 [debug] 20331#20331: *75 access phase: 8 2017/08/14 18:53:31 [debug] 20331#20331: *75 access phase: 9 2017/08/14 18:53:31 [debug] 20331#20331: *75 access phase: 10 2017/08/14 18:53:31 [debug] 20331#20331: *75 post access phase: 11 2017/08/14 18:53:31 [debug] 20331#20331: *75 try files phase: 12 2017/08/14 18:53:31 [debug] 20331#20331: *75 http script var: "/api" 2017/08/14 18:53:31 [debug] 20331#20331: *75 trying use file: "/api" "/var/www/html/api/api" 2017/08/14 18:53:31 [debug] 20331#20331: *75 http script var: "/api" 2017/08/14 18:53:31 [debug] 20331#20331: *75 trying use dir: "/api" "/var/www/html/api/api" 2017/08/14 18:53:31 [debug] 20331#20331: *75 http script copy: "/index.php" 2017/08/14 18:53:31 [debug] 20331#20331: *75 http script var: "" 2017/08/14 18:53:31 [debug] 20331#20331: *75 trying use file: "/index.php" "/var/www/html/api/index.php" 2017/08/14 18:53:31 [debug] 20331#20331: *75 internal redirect: "/index.php?" nginx version: nginx/1.12.1
this configuration works :)
server { listen 80; server_name _; index index.php; rewrite_log on; root /var/www/html; location / { try_files $uri /public/index.php$is_args$args; } location ^~ /api { try_files $uri /api/index.php$is_args$args; location ~ \.php { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } } location ~ \.php { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } }
Comments
Post a Comment