My server has a root directory which is /home/forge/example.com/current/ionic/www
and a secondary API PHP directory, located /home/forge/example.com/current/public
.
When the user browses to example.com/api the website should load from /home/forge/example.com/current/public
(which is different from the root).
I have been able to successfully configure this using alias
and load index.html
, however php files are not loading.
I have discovered on StackExchange, that this is due to a long-standing bug with Nginx.
I've read a couple of posts, where the workaround is to re-write the URL.
How to use Nginx alias to load PHP from other directory?
How can I get around using alias in nginx?
Here is my sites-available file.
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/example.com/before/*;
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /home/forge/example.com/current/ionic/www;
# location /api {
# alias /home/forge/example.com/current/public;
location /api {
root /home/forge/example.com/current/public;
rewrite ^/api/(.*)$ /$1 break;
try_files $uri /system/index.php?r=$uri;
index index.php;
}
# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/example.com/381129/server.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/381129/server.key;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/example.com/server/*;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/example.com-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/example.com/after/*;