我尝试用nginx设置agendav(一个php网络日历客户端)。我设法看到了登录提示。不幸的是,我不知道当我尝试登录时会发生什么,我还不太熟悉nginx。处理regex也让我抓狂,而且也没有足够的文档。
我的php索引文件位于/usr/share/agendav/web/public/index.php。我将通过以下url访问该应用程序: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;
}
}
有人能指导我怎么做吗?
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;
}
}
有关详细信息,请参阅此文档。有关nginx
文档的一般来源,请参见此。