lets say I've a path like:
/var/www/myside/
that path contains two folders... let's say /static
and /manage
I'd like to configure nginx to have an access to:
/static
folder on /
(eg. http://example.org/) this folder has some .html files.
/manage
folder on /manage
(eg. http://example.org/manage) in this case this folder contains Slim's PHP framework code - that means the index.php file is in public
subfolder (eg. /var/www/mysite/manage/public/index.php)
I've tried a lot of combinations such as
server { listen 80; server_name example.org; error_log /usr/local/etc/nginx/logs/mysite/error.log; access_log /usr/local/etc/nginx/logs/mysite/access.log; root /var/www/mysite; location /manage { root $uri/manage/public; try_files $uri /index.php$is_args$args; } location / { root $uri/static/; index index.html; } location ~ \.php { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; } }
The /
works correctly anyway manage
doesn't. Am I doing something wrong? Does anybody know what should I change?
Matthew.
Every NGINX configuration file will be found in the /etc/nginx/ directory, with the main configuration file located in /etc/nginx/nginx. conf . NGINX configuration options are known as “directives”: these are arranged into groups, known interchangeably as blocks or contexts .
By default the file is named nginx. conf and for NGINX Plus is placed in the /etc/nginx directory. (For NGINX Open Source , the location depends on the package system used to install NGINX and the operating system. It is typically one of /usr/local/nginx/conf, /etc/nginx, or /usr/local/etc/nginx.)
The location directive within NGINX server block allows to route request to correct location within the file system. The directive is used to tell NGINX where to look for a resource by including files and folders while matching a location block against an URL.
To access a path like /var/www/mysite/manage/public
with a URI like /manage
, you will need to use alias
rather than root
. See this document for details.
I am assuming that you need to run PHP from both roots, in which case you will need two location ~ \.php
blocks, see example below. If you have no PHP within /var/www/mysite/static
, you can delete the unused location
block.
For example:
server { listen 80; server_name example.org; error_log /usr/local/etc/nginx/logs/mysite/error.log; access_log /usr/local/etc/nginx/logs/mysite/access.log; root /var/www/mysite/static; index index.html; location / { } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } location ^~ /manage { alias /var/www/mysite/manage/public; index index.php; if (!-e $request_filename) { rewrite ^ /manage/index.php last; } location ~ \.php$ { if (!-f $request_filename) { return 404; } fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } } }
The ^~
modifier causes the prefix location to take precedence over regular expression locations at the same level. See this document for details.
The alias
and try_files
directives are not together due to this long standing bug.
Be aware of this caution in the use of the if
directive.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With