我最近换到了 Ubuntu。我经常使用的工具之一是 XAMPP。当我在 Ubuntu 上安装 LAMP 堆栈时,我注意到性能有了很大的提升,对此我非常满意。然而,在花了几天时间阅读了几十篇操作方法文章之后,我仍然无法正确设置它。
我最终安装了apache2
+,php5-fpm
因为它可以以用户的权限执行文件。
然而,这对我来说仍然不太奏效。例如,我下载了一个流行 CMS 的存档并将其提取到 Apache html 目录中。这些文件上的最终权限是0664
和0700
文件夹上的。
Apache 目录规则:
<Directory "/home/myuser/www/">
AllowOverride All
Require all granted
Allow from all
</Directory>
什么时候AllowOverride All
:
[Fri Dec 12 21:16:01.037580 2014] [core:crit] [pid 23745:tid 140466931369728]
(13)Permission denied: [client 127.0.0.1:54670] AH00529:
/home/myuser/www/mycms/install/.htaccess pcfg_openfile: unable to check htaccess
file, ensure it is readable and that '/home/myuser/www/mycms/install/' is executable
运行时AllowOverride None
,apache2index.php
位于根目录,但无法运行/config/index.php
[Fri Dec 12 21:02:41.552369 2014] [core:error] [pid 22530:tid 140517706823424]
(13)Permission denied: [client 127.0.0.1:54465] AH00035: access to
/install/index.php denied (filesystem path
'/home/myuser/www/mycms/install/index.php') because search
permissions are missing on a component of the path
我还不太熟悉 apache 目录规则,也许其中有些错误。该index.php
文件应该可读吗?该php5-fpm
服务以我的用户身份运行:
/etc/php5/fpm/pool.d
Line 22: user = myuser
Line 23: group = myuser
当我设置时,文件会运行chmod -R 0755 www/
。但是,每次添加一些文件或由 php 创建文件时,我都无法继续运行此命令。有没有一种不不断篡改权限的方法?我问了一位同事,他只是说:“设置服务root
用户php5-fpm
”。然而,这更像是一种临时的逃避解决方案。我还担心我可能会运行一些glob/*
函数并删除我无意删除的文件(过去曾发生过这种情况)。
如何设置我的 LAMP 堆栈以便能够自动运行我的所有文件?
如果有关于如何使用 suphp 或其他模块进行设置的良好指南,我很乐意查看。但它必须完全正常工作。
编辑
ps aux | egrep '(apache|httpd)'
root 18763 0.0 0.1 84256 4720 ? Ss 21:35 0:00 /usr/sbin/apache2 -k start
www-data 18767 0.0 0.1 373432 6256 ? Sl 21:35 0:00 /usr/sbin/apache2 -k start
www-data 18768 0.0 0.1 373432 6256 ? Sl 21:35 0:00 /usr/sbin/apache2 -k start
gskema 20515 0.0 0.0 14884 2364 pts/6 S+ 21:37 0:00 grep -E --color=auto (apache|httpd)
ps aux | egrep '(php)'
gskema 8312 0.0 0.0 4448 492 ? S 16:32 0:00 /bin/sh /opt/phpstorm/bin/phpstorm.sh
gskema 8361 8.7 31.0 4630304 1245684 ? Sl 16:32 26:52 /usr/lib/jvm/java-8-oracle/bin/java -Xms128m -Xmx750m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=225m -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Dawt.useSystemAAFontSettings=lcd -Djb.vmOptionsFile=/opt/phpstorm/bin/phpstorm64.vmoptions -XX:ErrorFile=/home/gskema/java_error_in_WEBIDE_%p.log -Xbootclasspath/a:/opt/phpstorm/bin/../lib/boot.jar -Didea.paths.selector=WebIde80 -Didea.platform.prefix=PhpStorm -Didea.no.jre.check=true -Djb.restart.code=88 com.intellij.idea.Main
gskema 8396 0.0 0.0 4936 904 ? S 16:32 0:00 /opt/phpstorm/bin/fsnotifier64
root 18950 0.0 0.6 348744 24312 ? Ss 21:35 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 18953 0.0 0.1 348744 7836 ? S 21:35 0:00 php-fpm: pool www
www-data 18954 0.0 0.1 348744 7836 ? S 21:35 0:00 php-fpm: pool www
gskema 20649 0.0 0.0 14888 2364 pts/6 R+ 21:40 0:00 grep -E --color=auto (php)
我运行了一个命令,发现有多个?进程正在运行。有人可以对此发表评论吗?
答案1
那里有很多关于在 Ubuntu 上设置 apache2 + php-fpm 的指南。但是,它们确实没有提到目录权限,而且我经常看到我的组织中的人们为此苦恼。以下是您应该查看的常规设置:
Apache 应该以 www-data 用户身份运行
php-fpm 应该以 www-data 用户身份运行。
www-data 1591 0.0 0.4 417116 34008 ? S Dec19 0:00 php-fpm: pool
apache 根目录应以您的用户作为所有者,以 www-data 作为组。
drwxr-xr-x 44 anirudh www-data 4096 Dec 20 10:27 www
然后将 www-data 组添加到您的用户。
sudo usermod -a -G www-data <your-user>
话虽如此,如果您仍然想以您的用户身份运行 php-fpm,请确保 apache 也以同一用户身份运行,然后我认为它应该可以正常工作。