Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nginx location configuration (subfolders)

Tags:

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.

like image 405
Nubzor Avatar asked Feb 24 '17 16:02

Nubzor


People also ask

Where do nginx config files go?

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 .

Where is nginx folder located?

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.)

How does the location directive work in 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.


1 Answers

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.

like image 77
Richard Smith Avatar answered Sep 25 '22 18:09

Richard Smith