如何在 nginx 中正确配置别名指令?
How to properly configure alias directive in nginx?
我一直在尝试在我的 nginx 网络服务器上配置多个网络应用程序,但我无法运行一个需要 $document_root 设置为 laravel [=43= 的 Laravel 应用程序] 文件夹。
我目前正在尝试使用 alias 指令配置它,但由于不明原因,这不起作用。这是我正在尝试做的事情。
# Default server configuration
#
server {
listen 80;
# SSL configuration
#
listen 443 ssl;
error_log /var/log/nginx/error.log warn;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
set $root_path '/var/www/html';
root $root_path;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
server_name localhost;
location /paperwork {
alias /var/www/html/paperwork/frontend/public;
try_files $uri $uri/;
#location ~ \.php {
# fastcgi_split_path_info ^(.+\.php)(.*)$;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# include /etc/nginx/fastcgi_params;
# #fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
# #fastcgi_intercept_errors on;
#}
}
#location @paperwork {
# rewrite /paperwork/(.*)$ /paperwork/index.php/ last;
#}
location / {
}
location /wallabag {
try_files $uri $uri/ /index.php;
}
location /laverna {
try_files $uri/ /index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
为了测试我的 "alias" 配置,我将 'test.php' 文件放入 /var/www/html/paperwork/frontend/public/test。php 并尝试通过 https://IP/paperwork/test.php 访问它。我收到 404 错误,nginx 错误日志中没有任何内容。
如果我在浏览器中尝试 https://IP/paperwork/frontend/public/test.php,它会显示 test.php 文件而不会出现错误。
如果我在 php 位置取消注释 try_files 行,则没有任何变化。
如果我将 test.php 复制到 /var/www/html/paperwork/test2.php 并访问 https://IP/paperwork/test2.php 文件显示没有错误,所以我可以在这里看到别名不起作用文书工作 public 目录中没有 test2.php。
如果我取消注释文书工作位置中的 php 位置,我可能会有不同的行为。有了这个,像 https://IP/paperwork/test.php 这样的请求不会显示 404 而是一个空白屏幕。
我浏览了很多与此相关的论坛/问题,但我无法获得用于显示 test.php...
等简单任务的工作配置
谢谢!
我找到了解决方案。似乎为 php 个文件发送了错误的请求。当使用别名时,建议使用 $request_filename 而不是 $fastcgi_script_name。
这是我的位置块:
location /paperwork {
alias /var/www/html/paperwork/frontend/public;
#try_files $uri $uri/;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
#fastcgi_intercept_errors on;
}
}
这解决了我的 'test.php' 文件的问题,该文件现在在到达 https://IP/paperwork/test.php 时执行。所以别名正在工作并且 php 执行得很好。
我在尝试达到 'index.php'(这是我的 laravel 应用程序索引)时仍然遇到问题。找到了文件,但没有执行而是下载了文件。因此,当我到达 https://IP/paperwork/index.php 时,我下载了一个登录文件,该文件是 index.php 文件。如果我尝试 /paperwork/index.php/login 或 /paperwork/login,我会得到相同的行为。
试试这个:
location /api/ {
index index.php index.html index.htm;
alias /app/www/;
location ~* "\.php$" {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
我一直在尝试在我的 nginx 网络服务器上配置多个网络应用程序,但我无法运行一个需要 $document_root 设置为 laravel [=43= 的 Laravel 应用程序] 文件夹。 我目前正在尝试使用 alias 指令配置它,但由于不明原因,这不起作用。这是我正在尝试做的事情。
# Default server configuration
#
server {
listen 80;
# SSL configuration
#
listen 443 ssl;
error_log /var/log/nginx/error.log warn;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
set $root_path '/var/www/html';
root $root_path;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
server_name localhost;
location /paperwork {
alias /var/www/html/paperwork/frontend/public;
try_files $uri $uri/;
#location ~ \.php {
# fastcgi_split_path_info ^(.+\.php)(.*)$;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# include /etc/nginx/fastcgi_params;
# #fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
# #fastcgi_intercept_errors on;
#}
}
#location @paperwork {
# rewrite /paperwork/(.*)$ /paperwork/index.php/ last;
#}
location / {
}
location /wallabag {
try_files $uri $uri/ /index.php;
}
location /laverna {
try_files $uri/ /index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
为了测试我的 "alias" 配置,我将 'test.php' 文件放入 /var/www/html/paperwork/frontend/public/test。php 并尝试通过 https://IP/paperwork/test.php 访问它。我收到 404 错误,nginx 错误日志中没有任何内容。 如果我在浏览器中尝试 https://IP/paperwork/frontend/public/test.php,它会显示 test.php 文件而不会出现错误。 如果我在 php 位置取消注释 try_files 行,则没有任何变化。
如果我将 test.php 复制到 /var/www/html/paperwork/test2.php 并访问 https://IP/paperwork/test2.php 文件显示没有错误,所以我可以在这里看到别名不起作用文书工作 public 目录中没有 test2.php。
如果我取消注释文书工作位置中的 php 位置,我可能会有不同的行为。有了这个,像 https://IP/paperwork/test.php 这样的请求不会显示 404 而是一个空白屏幕。
我浏览了很多与此相关的论坛/问题,但我无法获得用于显示 test.php...
等简单任务的工作配置谢谢!
我找到了解决方案。似乎为 php 个文件发送了错误的请求。当使用别名时,建议使用 $request_filename 而不是 $fastcgi_script_name。
这是我的位置块:
location /paperwork {
alias /var/www/html/paperwork/frontend/public;
#try_files $uri $uri/;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
#fastcgi_intercept_errors on;
}
}
这解决了我的 'test.php' 文件的问题,该文件现在在到达 https://IP/paperwork/test.php 时执行。所以别名正在工作并且 php 执行得很好。 我在尝试达到 'index.php'(这是我的 laravel 应用程序索引)时仍然遇到问题。找到了文件,但没有执行而是下载了文件。因此,当我到达 https://IP/paperwork/index.php 时,我下载了一个登录文件,该文件是 index.php 文件。如果我尝试 /paperwork/index.php/login 或 /paperwork/login,我会得到相同的行为。
试试这个:
location /api/ {
index index.php index.html index.htm;
alias /app/www/;
location ~* "\.php$" {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/