我希望能够在运行 Ubuntu 12.04 的开发箱上运行多个 php 版本。我想要完成的是,当我使用 localhost 作为域时,会使用默认值(假设 php 5.3.17)。当我使用 547.localhost 作为域时,使用 php 5.4.7。我看过一些教程来使用 fastcgi 使其工作,但直到现在我还无法让它工作。我看过这些教程:
因为就我所见,我已经完成了所需的一切。问题是 php 根本无法运行。当我去http://localhost/somephpfile.php
它只是输出 php 文件的来源。对于http://547.localhost/somephpfile.php
.
我将分解我采取的步骤,希望有人能够发现我遗漏的内容。
首先,我使用sudo apt-get install lamp-server^ phpmyadmin
. 在此之后,我有一个运行 php 存储库版本的工作开发服务器。
然后我使用 phpfarm 创建了两个 php 安装,一个用于 5.3.17,一个用于 5.4.7。phpfarm 的位置是 /etc/php/phpfarm
,所以可执行文件在/etc/php/phpfarm/inst/php-{version}/bin
然后我为 apache 启用 suaxec 和 fastcgi 并禁用 mod_php sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
接下来,我编辑/etc/apache2/mods-enabled/fastcgi.conf
为:
<IfModule mod_fastcgi.c>
FastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiWrapper /usr/lib/apache2/suexec FastCgiConfig -idle-timeout
110 -killInterval 120 …
Run Code Online (Sandbox Code Playgroud)虽然我作为 Linux用户很自在,但我的 Linux Admin-fu 有点弱。因此,我在这里寻找有关我将要构建的 CentOS 服务器的指导。
我需要为我们的一些客户端设置一个 Apache2 Web 服务器。我希望每个客户端的 Web 内容都USERDIR
位于静态 HTML 站点的主目录下(在 apache.conf 中,对吗?)。我希望 Apache 作为客户端运行 ( suexec
?)。他们的一些东西将是 PHP 应用程序,我的印象是我也想看看suphp
。
所以基本上我想看起来像一个共享网络托管公司的小版本。考虑到这些有多常见,我想我很容易找到一个很好的当前操作指南来设置这一切,但到目前为止我运气很少。我怀疑我的搜索词已关闭。
所以问题(随意回答任何或所有):
我计划让最终用户通过 SSH、SFTP 或 SCP 访问他们的东西(如果这会影响任何事情)。
在此先感谢您的帮助。
[编辑] 我应该早先提到这一点:我寻求模拟与文件权限和所有权相关的共享托管服务提供商的一个关键目标。我真的很想避免教用户需要更改这些东西只是为了查看他们的添加/更改。
我正在将几个 Wordpress 博客迁移到 AWS,但遇到了文件权限问题,该问题在过去几个小时内成功阻止了我。
最简单的 fopen 调用总是失败,并显示“无法打开流:权限被拒绝”:
<?php $handle = fopen('test.txt', 'w') or die('Can\'t open file'); ?>
Run Code Online (Sandbox Code Playgroud)
我已经尝试/检查了以下内容
有什么我错过的可能会导致这种情况吗?我怀疑我已经盯着这个看了很长时间,我错过了一些明显的东西。
更新:在应用了womble 的建议后,我开始认为这个问题不仅仅是错误的权限或 PHP 配置错误。我确实设法让上面的代码写出一个文件,但是即使使用正确的用户和组执行 PHP 脚本,生成的文件所有权和组也被设置为 apache 的所有权和组。如果我从命令行执行相同的测试脚本,则发出的文件具有正确的权限。这让我相信这是我使用 mod_suexec 的问题。
编辑:我对getmyuid()和getmygid()的使用不正确,因为它们只返回脚本文件的用户和组,而不是它运行的权限。更正确的方法是使用像这样的 comething:
<?php echo exec('ps -up '.getmypid()); ?>
Run Code Online (Sandbox Code Playgroud) 嗨,我已经在 ubuntu 12.04 上安装了 suexec:
apt-get install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi
Run Code Online (Sandbox Code Playgroud)
但是,当我运行以下命令时:
sudo /usr/lib/apache2/suexec -V
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
Run Code Online (Sandbox Code Playgroud)
我正在使用“/home/user/public_html”来为用户提供网络上的内容而不是“/var/www” 如何将根目录更改为“/home”?
我正在一个站点上工作,在该站点上我使用 SSI 在 HTML 页面上设置一个被解析的变量,然后在mod_rewrite
重写后由脚本获取该变量。这适用于我的本地设置,但由于某种原因它不适用于生产服务器(两者都是 apache 2.2.22)。以下是相关位:
该perl
脚本:
my $working = ($ENV{'HTTP_my_var'} || $ENV{'REDIRECT_HTTP_my_var'}) || "NO";
print "Content-type: text/html\n\n";
print "is it working? <b>$working</b>";
Run Code Online (Sandbox Code Playgroud)
相关线路来自 .htaccess
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteRule ^my_tst$ /cgi-bin/my_tst.cgi [L]
Run Code Online (Sandbox Code Playgroud)
HTML文件:
<!--#set var="HTTP_my_var" value="YES" -->
<!--#include virtual="/cgi-bin/my_tst.cgi" -->
<br>
<!--#include virtual="/my_tst" -->
Run Code Online (Sandbox Code Playgroud)
这是我本地机器上的结果:
它在工作吗?是的
它在工作吗?是的
但是在生产服务器上:
它在工作吗?是的
它在工作吗?不
比较服务器配置,唯一真正想到的是生产服务器httpd -M
上没有列出 apreq_module (shared)
,本地服务器也没有列出 fcgid_module (shared)
(等等)。可能是由于这些吗?是什么导致了这种奇怪的行为不匹配?
在情况下,它需要提的是,当我做的转储%ENV
,没有 …
mod-rewrite .htaccess suexec server-side-includes apache-2.2
在尝试启用 suexec 模块的过程中,我开始收到这些警告(当我重新启动 apache 时)。我在启用和禁用 suexec 时得到它们:
* Restarting web server apache2
[Wed Oct 05 01:29:40 2011] [warn] NameVirtualHost 12.345.67.89:443 has no VirtualHosts
... waiting [Wed Oct 05 01:29:41 2011] [warn] 12.345.67.89:443 has no VirtualHosts
...done.
Run Code Online (Sandbox Code Playgroud)
我正在运行 Ubuntu 10.04、Apache2.2、PHP、MYSQL...
我正在通过 https:// 运行一个带有签名证书、ssl 等的站点,以及其他几个未加密的站点。这以前工作正常,但现在(因为我在尝试启用 suexec 后重新启动了服务器)我收到了上述错误。如果启用了 *:443 虚拟主机,apache 将不会重启,也不会提供任何服务。如果我禁用 *:443 虚拟主机,apache 将不会重新启动,并且不会为我托管的任何域提供服务。
除了 suexec 配置(通过命令行)之外,我唯一搞砸的是启用了 ssl 的域的启用站点的配置文件,如下所示:
<VirtualHost *:80>
ServerAdmin name@gmail.com
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /srv/www/mysite.com/public_html/
ErrorLog /srv/www/mysite.com/logs/error.log
CustomLog /srv/www/mysite.com/logs/access.log combined
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/mysite.com.crt …
Run Code Online (Sandbox Code Playgroud) 我试图在这里遵循这个非常详细的说明,我只是从 www-data 用户更改为 apache 用户,并使用 /var/www/hosts/sitename/public_html 而不是 /home/user/public_html
但是,我花了一整天的时间试图弄清楚为什么 php 文件内容没有被正确解析就显示出来了。我似乎无法弄清楚这一点。以下是我当前的配置:
/etc/httpd/conf.d/fastcgi.conf
User apache
Group apache
LoadModule fastcgi_module modules/mod_fastcgi.so
# dir for IPC socket files
FastCgiIpcDir /var/run/mod_fastcgi
# wrap all fastcgi script calls in suexec
FastCgiWrapper On
# global FastCgiConfig can be overridden by FastCgiServer options in vhost config
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1
# sample PHP config
# see /usr/share/doc/mod_fastcgi-2.4.6 for php-wrapper script
# don't forget to disable mod_php in /etc/httpd/conf.d/php.conf!
#
# to enable …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有关于如何设置 Apache + SuExec + php-fpm 的好指南?我有一个服务器,我将使用几个单独的网站。所以,我需要 php 作为站点所有者用户运行。如我所见,php-fpm 与 php-fcgi 略有不同。在这种情况下是否需要来自 Apache 的 mod_fcgid?如何设置这一切?
现在我的网站正在运行 Apache + mod_suphp + php-cgi,所以...很好,但有点慢。我想保持安全并获得使用 APC 的能力。
尝试了很多示例,但似乎没有任何效果。我不想使用 yum/apt-get 我想从源头做所有事情,这样我才能更好地理解。Yum/apt-get 只是欺骗系统,您必须等待版本,而且您没有配置控制。
apache-2.2 ×9
suexec ×9
mod-fcgid ×3
php ×3
php-fpm ×3
fastcgi ×2
suphp ×2
.htaccess ×1
centos ×1
linux ×1
mod-rewrite ×1
ssl ×1
ubuntu ×1
virtualhost ×1