我尝试用nginx设置agendav(一个php web日历客户端)。我设法看到了登录提示。不幸的是,我不明白当我尝试登录时会发生什么,我还不熟悉nginx。处理正则表达式也让我感到疯狂,而且也没有足够的文档。
我的php索引文件位于/usr/share/agendav/web/public/index.php我将通过以下网址访问该应用程序:https://server.com/public/index.php它可以正常工作。输入用户名和密码后,我将转发至https://server.com/public/index.php/login。但这会给我一个404错误代码。
我想我的try_files是错误的,但我不知道如何解决这个问题。
这是我的nginx服务器配置的有趣部分:
server {
listen 443 ssl;
server_name server.com;
root /usr/share;
index index.html index.htm;
ssl on;
ssl_certificate /etc/ssl/cacert.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
location / {
try_files $uri $uri/ =404;
auth_basic "Authorisation Required";
auth_basic_user_file /usr/share/nginx/www/users;
}
location /public {
root /usr/share/agendav/web/;
index index.php;
location ~ /public/(.+\.php)$ {
try_files $uri $uri/ /index.php;
root /usr/share/agendav/web/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
有人可以指导我如何做这项工作吗?
答案 0 :(得分:0)
URI /public/index.php/login
是一个带有路径信息的PHP脚本,它与PHP正则表达式位置不匹配。您需要调整正则表达式,提取路径信息并执行脚本。
有许多使用fastcgi_split_path_info
和if
指令的示例,但我更喜欢使用try_files
这样:
set $controller /public/index.php;
location /public {
root /usr/share/agendav/web;
index index.php;
try_files $uri $uri/ $controller;
location ~ ^(?<script>.*\.php)(?<pathinfo>.*)$ {
try_files $script $controller;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $pathinfo;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
有关详情,请参阅this document。有关nginx
文档的一般来源,请参阅this。