Created
September 28, 2011 14:01
-
-
Save alanbriolat/1248004 to your computer and use it in GitHub Desktop.
nginx userdir + PHP-FPM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
server { | |
listen 80; | |
server_name localhost; | |
# ... other default site stuff, document root, etc. ... | |
location ~ ^/~(?<userdir_user>.+?)(?<userdir_uri>/.*)?$ { | |
alias /home/$userdir_user/public_html$userdir_uri; | |
index index.html index.htm index.php; | |
autoindex on; | |
include php5_generic; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
location ~ \.php$ { | |
include fastcgi_params; | |
fastcgi_param SCRIPT_FILENAME $request_filename; | |
fastcgi_pass unix:/var/run/php5-fpm.sock; | |
} |
Here's what I'm doing for PHP + userdirs in ~user
:
Amend default.conf:
index index.php index.html index.htm;
autoindex on;
# user directories
location ~ ^/~(?<userdir_user>[\w-]+)(?<userdir_uri>/.*)?$ {
alias /home/$userdir_user/public_html$userdir_uri;
location ~ [^/]\.php(/|$) {
include php5_common;
}
}
# php support
location ~ [^/]\.php(/|$) {
include php5_common;
}
Add php5_common:
include fastcgi_params;
fastcgi_index index.php;
# check if requested PHP file really exists
if (!-f $request_filename) {
return 404;
}
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/var/run/php-fpm-www.sock;
Some notes:
- using one common include for php5 stuff
- using
if
to test for existence of PHP script file on disk before passing it to php-fpm (try_files
doesn't work after thealias
in the userdir context becausealias
overrides the document root, and this is a valid use of if) - uses
$request_filename
instead of$fastcgi_script_name
as it works better when you are using aliases, and provides the translated disk path for the script - Doesn't bother with PATH_INFO or DOCUMENT_ROOT fastcgi parameters because I'm not sure I need them yet...
@alanorth Thanks! I added that to my nginx config (with a minor adjustment; the socket on Debian is /var/run/php5-fpm.sock
) and it works perfectly.
The php5_generic cannot be included directly, it should be in a separate file. Otherwise it won't work.
Could this be modified to work with Gunicorn does anyone know?
@alanorth @nyuszika7h I too was able to use this on Ubuntu 18.04 by updating just the socket reference.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This was very good example.
However, I think this example doesn't set PATH_INFO correctly as in http://wiki.nginx.org/PHPFcgiExample.
I did modifications for the regexp to match https://server.com/user/username/ userdirs:
default.conf
(This has to be before the location / rule)
Now for example
saves
and
php5_userdirs
and now SCRIPT_FILENAME, SCRIPT_NAME, PATH_INFO, REQUEST_URI, DOCUMENT_URI and DOCUMENT_ROOT variables seem to be like in nginx documentation example.
I have no idea if this is correct and I need to run more tests.
It's still missing one part of the NGINX guide:
Can someone confirm if my findings are correct?