我有以下 nginx vhost 配置:
server {
listen 80 default_server;
access_log /path/to/site/dir/logs/access.log;
error_log /path/to/site/dir/logs/error.log;
root /path/to/site/dir/webroot;
index index.php index.html;
try_files $uri /index.php;
location ~ \.php$ {
if (!-f $request_filename) {
return 404;
}
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME /path/to/site/dir/webroot$fastcgi_script_name;
include /path/to/nginx/conf/fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
我想重定向所有与 index.php 存在的文件不匹配的请求。这适用于目前大多数 URI,例如:
example.com/asd
example.com/asd/123/1.txt
Run Code Online (Sandbox Code Playgroud)
无论是中asd或asd/123/1.txt存在,所以他们重定向到的index.php和工作正常。但是,如果我输入 url example.com/asd.php,它会尝试查找asd.php,当找不到时,它会返回 404 而不是将请求发送到index.php。
有没有得到一个方式asd.php进行也发送到index.php如果asd.php不存在?
我已经用 Nginx + PHP5-FPM 配置了一个 Ubuntu 网络服务器。我创建了一个 chrooted 环境(使用 jailkit),我将我的开发人员投入其中,他们可以从那里开发他们的测试应用程序。
Chroot 监狱:/home/jail
Nginx 和 PHP5-FPM 在 chroot 之外运行,但被配置为在 chroot 环境中与网站一起运行。
到目前为止,Nginx 和 PHP5-FPM 提供文件没有问题,除了以下问题: 尝试连接到 MySQL 时,我们收到此错误:SQLSTATE[HY000] [2002] 无法通过套接字连接到本地 MySQL 服务器 ' /var/run/mysqld/mysqld.sock'
现在,我认为问题是由于非 chroot 的 php.ini 引用了 chroot 环境之外的 mysqld.sock(它目前实际上使用的是 MySQL 默认设置)。
我的问题是,如何配置 PHP 以通过环回或类似方式访问 MySQL?(在谷歌结果中发现这是一个建议,但没有任何说明)
或者,如果我遗漏了一些其他明显的设置,请告诉我。如果可以选择创建硬链接(即使重新启动 mysql 也将保持可用),那也会很方便。
我有一对服务器托管一个流量适中的 Magento 电子商务网站(谷歌分析报告每天 60k 页面浏览量,我认为服务器本身报告了大约 80k)。数据库服务器运行平稳快速,除了偶尔偶尔打嗝外,但 apache 服务器经常发生故障。
我已将 magento 设置为使用推荐的 PHP 缓存 (APC),并将其自己的缓存文件保存在 1.5 gig tmpfs 中(此 tmpfs 经常变得非常满,我有一个脚本运行以在 tmpfs 为超过 80% 已满)。我提供来自亚马逊云前沿的大多数图像。我最近将 nginx 设置为 apache 的反向代理(nginx 也提供静态文件)。我已经尽我所能配置了 apache - keepalives 和 hostnamelookups 都关闭了,prefork 配置如下:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我没有关闭 .htaccess 文件,并且访问日志是打开的。我知道有些模块我可以关闭。我不确定这三个变化中的任何一个会产生什么影响,如果有的话。
apache 服务器是一个 VPS,有 6 gig 的 RAM。截至撰写本文时,服务器正在报告load average: 17.77, 18.27, 49.76,但大约有 2 gig 的可用 RAM。当它变得非常糟糕时,负载会增加到 120+ 并保持在那里 - 重新启动 apache 会使站点重新启动并重新降低负载。
vmstat是(当服务器报告上面的负载时),我认为,显示 CPU …
我正在设置一个新的 Web 服务器并尝试使用 Windows Server 2008 R2 中可用的新应用程序池标识(如下所述:http : //learn.iis.net/page.aspx/624/application-pool-identities/ ) 以保护文件夹结构。
但是,即使我在 php.ini 中将 FastCGI 模拟设置为 true,PHP 似乎仍在使用本地 IUSR 帐户 - 如何让 PHP 在应用程序池标识下运行?
有问题的文件夹是 c:\inetpub\wwwroot 之外的共享缓存目录。当我授予 IIS_APPPOOL\DefaultAppPool 修改权限时,PHP 文件无法访问该文件夹,但当我授予 SERVERNAME\IUSR(或用户组)权限时,它们可以访问。
PHP 5.3 是使用 IIS 中的 Web 平台安装程序安装的。
PHP 应用程序正在使用 Zend_Cache,如果这有所不同的话。
我们在Red Hat Linux 6 (RHEL)上使用 nginx 和 php-fpm 设置了 Web 服务器。这台机器已经安装了 WordPress,并且运行良好。我们已将 WordPress 设置为转到wptest.domain.local。然后,我们在启用了站点的名为servername.domain.local 的站点中创建了一个新站点,我们希望在其中托管各种工具。
PHP 始终运行良好,我们对 WordPress 没有任何问题。但是当尝试访问 phpMyAdmin 时,我们收到此错误:
2012/09/14 16:22:13 [error] 10065#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.15, server: servername, request: "GET /phpmyadmin/setup/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "servername"
这是我们网站的配置:
server_name servername severname.domain.local;
access_log /srv/www/severname/logs/access.log;
error_log /srv/www/severname/logs/error.log;
root /srv/www/severname/public_html;
地点 / {
index index.html index.htm index.php;
try_files $uri $uri//index.php?q=$uri&$args;
}
位置 = /favicon.ico … 自托管盒子,
RHEL 6
PHP 5.3.3
PDO 安装了
freetds 安装了
pdo_dblib - 到目前为止没有运气安装
我的目标是在 sybase 中使用 PDO。试图从适当版本的 php 源代码安装 pdo_dblib。我尝试了多种方法并搜索了很多有关此主题的帮助,但尚未成功。
$ ./configure
$ make
$ su root
Password:
$ make install
Run Code Online (Sandbox Code Playgroud)
这是成功的
在 /ext/pdo_dblib 文件夹中:
$ phpize
$ ./configure
$ make
$ make test
Run Code Online (Sandbox Code Playgroud)
错误输出:
PHP Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: …Run Code Online (Sandbox Code Playgroud) 想象一下sites-enabled从/etc/apache2/sites-available. (只有基于 Debian 的发行版才能像这样工作。)
是否可以将warning来自特定站点的php 脚本的消息静音,而不触及实际htdocs?
通常有几个解决方案来实现一些相关的:
error_reporting()指令,例如error_reporting(E_ERROR);。.htaccess文件中设置 php_flags,如下所示:php_flag display_errors off使用ini_set内部脚本:
ini_set('display_errors', 'Off');
ini_set('display_startup_errors', 'Off');
error_reporting(0);
Run Code Online (Sandbox Code Playgroud)前置@到抛出警告或错误的函数。
php.ini到实说error_reporting = E_ALL ^ E_WARNINGdisplay_errors = 1 然而,这些都意味着接触 htdocs 或全局应用更改。想象一下,htdocs它们以只读方式安装。我将如何仅抑制某些站点的警告(或通知)?
我假设 Debian/Ubuntu 有a2ensite特定的配置是有原因的,我希望我可以改变这些。log_level示例“可用站点”配置中有一个指令,但它处理记录的消息量。不是 php 脚本输出的消息。
在php.iniorapache2.conf或 中手动添加部分httpd.conf也可以。如果可能的话。
也可以看看:
阅读此答案后,我决定将服务器上 httpd 的 MPM 更改为 worker。但是在编辑时/etc/sysconfig/httpd,我注意到了这条评论:
# The default processing model (MPM) is the process-based
# 'prefork' model. A thread-based model, 'worker', is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker
Run Code Online (Sandbox Code Playgroud)
我可能解释错了,但它不是告诉我工人不能使用 mod_php 吗?因为这是我目前正在使用的。
服务器运行 CentOS 6.4 和 Apache 2.2。
我有一个运行在带有 CentOS 的 AWS 微型实例上的Apache 2.4网络服务器。
apache 正在运行带有 prefork MPM 模块的 PHP。
服务器通过 Amazon 负载均衡器访问,该负载均衡器具有健康检查功能,每 60 秒尝试访问服务器的 index.php 网页。
问题是在 1-2 天后,Apache 以某种方式使用 index.php 页面达到了 256 个打开的进程并给出以下错误:
[Sun Sep 08 02:13:00.356051 2013] [mpm_prefork:error] [pid 1201] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
[Sun Sep 08 02:13:13.656694 2013] [mpm_prefork:error] [pid 1201] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
Run Code Online (Sandbox Code Playgroud)
通常发生这种情况时,不再接受新的 http 连接。
Apache 可能不会关闭负载均衡器的所有连接。
我们有另一台使用 Apache 2.2 的服务器,它没有这个问题,所以问题可能出在 2.4 版本上,它与 2.2 有很大不同(我们没有更改 Apache 的任何默认配置)。 …
目前,top向我展示了几乎所有httpd进程都由nobody. “几乎”,因为其中 2 个由root.
如果我有用户说:dartagnan, porthos, aramis,athos作为上述用户分别运行 httpd ,我如何才能做到这一点?
我希望在我跑步时看到这样的事情top:
PID 用户命令 第1234回 12 端口 /usr/local/apache/bin/httpd -k start -DSSL 342 aramis /usr/local/apache/bin/httpd -k 开始 -DSSL 214 athos /usr/local/apache/bin/httpd -k start -DSSL
============>这是我目前有什么我DONT喜欢看:
PID 用户命令 第1234回 12 没有人 /usr/local/apache/bin/httpd -k 开始 -DSSL 第342话 第214回 244 root /usr/local/apache/bin/httpd -k start -DSSL 334 root /usr/local/apache/bin/httpd -k start -DSSL