标签: php

nginx:禁止访问文件夹,某些子文件夹除外

如何拒绝对文件夹的访问,但“拒绝”中的某些子文件夹除外?

我尝试了这样的事情(按此顺序):

#这个子文件夹不应该被拒绝,里面的php脚本应该是可执行的

位置 ~ /data/public { 允许所有; }

#此文件夹包含许多应拒绝公共访问的子文件夹

位置 ~ /data { 全部拒绝;返回404;}

...这不能正常工作。/data/public 文件夹中的文件是可以访问的(/data 中的所有其他文件都应该被拒绝),但 PHP 文件不再在 /data/public 文件夹中执行(如果我不添加这些限制,PHP文件是可执行的)。

怎么了?怎么可能是正确的?我认为有更好的方法来做到这一点。

如果有人能帮我解决这个问题,那就太好了:)。


谢谢,但 PHP 文件仍然没有在 /data/public/ 文件夹中执行,就像一个简单的

<? echo "test"; ?>
Run Code Online (Sandbox Code Playgroud)

它为您提供此文件作为下载(没有上面的“拒绝”配置,php 文件运行良好)。

我的PHP配置:

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)

/data/ 之外的所有其他目录中的 PHP 文件都在工作......(其他子文件夹也是如此)。

php rewrite nginx rules

2
推荐指数
1
解决办法
3万
查看次数

PHP 执行我已经覆盖的旧版本脚本

我真的吓坏了。这是我第一次遇到这样的事情。我已经修改保存了一个php脚本,现在在浏览器中调用,老版本还在运行。

不,我没有看到浏览器缓存的页面版本。我正在使用 Yii 框架,并且正在查看应用程序的日志。我可以在服务器上 vim php 文件,看看它是新版本。然而,当我从浏览器发出请求,然后查看日志时,日志中显示的新跟踪表明它正在运行旧版本。该版本不再存在,它已被覆盖。

我认为 PHP 引擎正在使用编译字节码的某些缓存版本,没有意识到(出于某种原因)脚本已被修改并且缓存编译版本已过时。这显然是某些服务器软件(php 本身?zend 引擎?随便……)中的一些可怕的错误。问题是:我该如何解决它?如何清除这种缓存以强制重新编译所有脚本文件?

phpinfo 的输出:

> PHP Version 5.1.6
> 
> 
> System    Linux ks3094309.kimsufi.com 2.6.38.2-xxxx-std-ipv6-64 #1 SMP
> Tue Apr 12 17:19:35 UTC 2011 x86_64 Build Date    Nov 29 2010 16:49:11
> Configure Command  './configure' '--build=x86_64-redhat-linux-gnu'
> '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu'
> '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr'
> '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc'
> '--datadir=/usr/share' '--includedir=/usr/include'
> '--libdir=/usr/lib64' '--libexecdir=/usr/libexec'
> '--localstatedir=/var' '--sharedstatedir=/usr/com'
> '--mandir=/usr/share/man' '--infodir=/usr/share/info'
> '--cache-file=../config.cache' '--with-libdir=lib64'
> '--with-config-file-path=/etc'
> '--with-config-file-scan-dir=/etc/php.d' '--disable-debug'
> '--with-pic' '--disable-rpath' …
Run Code Online (Sandbox Code Playgroud)

php zend-optimizer

2
推荐指数
1
解决办法
399
查看次数

为什么我的高 CPU 进程位于 /usr/bin/?

我不断收到 RAM 和 CPU 峰值,但我不知道它来自哪里。

如果我查看流程管理器,我会看到,

/usr/bin/php /home/hellohel/public_html/index.php
Run Code Online (Sandbox Code Playgroud)

重复了几次。我也偶尔看到:

[php] <defunct>
Run Code Online (Sandbox Code Playgroud)

占用我大约 30% 的 CPU!我有一个非常强大的服务器(云 VPS),有很多 CPU 和很多 RAM。通常,我的内存和 CPU 使用率保持在 7-9% 的健康状态,但每隔一段时间就会出现一个峰值,从而减慢我的网站速度。我的网站一整天都有很多流量,我认为峰值不是来自高流量峰值,而是某种内存泄漏。

我最大的问题是:

当我查看我的每日流程日志时,我看到:

49.0%   /usr/bin/php /home/hellohel/public_html/index.php
Run Code Online (Sandbox Code Playgroud)

事实上,这个目录甚至不存在。没有/usr/bin/php /目录。真正的脚本位于:

/home/hellohel/public_html/index.php
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?或者这一切正常吗...

php memory cpu-usage

2
推荐指数
1
解决办法
6068
查看次数

Nginx 和 PHP-FPM 403 禁止

我正在将 Nginx 与 PHP-FPM 一起使用。显示请求的页面,但萤火虫显示 CSS、JS 和图像的路径返回 403 Forbidden 错误,这破坏了样式。

查看日志:

013/03/09 21:15:43 [error] 1012#0: *17 FastCGI sent in stderr: "Access to the script '/var/www/my_server/extras/extras/go/_common/imgs/WebLogo2-trans.png' has been denied (see security.limit_extensions)" while reading response header from upstream, client: 33.33.33.1, server: my-server.com, request: "GET /extras/extras/go/_common/imgs/WebLogo2-trans.png HTTP/1.1", upstream: "fastcgi://unix:/var/tmp/php-fpm.sock:", host: "www.my-server.com", referrer: "http://www.my-server.com/extras/better/"
Run Code Online (Sandbox Code Playgroud)

但是,我尝试设置security.limit_extensions = .php .css .js .jpg只是为了看看会发生什么,但是 mimetype 被解释为 text/html 并且不会加载。

我试过 chmod 777 每个文件和目录,但没有运气。

这是 Nginx 服务器块:http : //dpaste.com/1017993/和相关位置块。位置块包含在另一个文件中,该文件未反映在服务器块中:

     location /extras/ {
            access_log /var/log/nginx/my_server/extras.log debug_phpfpm;
            include …
Run Code Online (Sandbox Code Playgroud)

php nginx php-fpm

2
推荐指数
1
解决办法
1万
查看次数

Linux 服务器只显示 php 的源代码,而不是实际站点

我正在尝试将我的网站转移到 Amazon EC2 实例。我已经设置了一切,现在当我打开我的网站而不是看到网站时,我只能看到源代码。

我在设置过程中做错了什么吗?

linux php

2
推荐指数
1
解决办法
2972
查看次数

PHP-FPM 白屏死机,未记录错误

这是两个不同的 php 文件的故事。

文件 1 来源:

<?php $null->test();
Run Code Online (Sandbox Code Playgroud)

文件 1 输出:

致命错误:
在第 1 行的 /wwwroot/sites/example.com/public/fatal.php 中的非对象上调用成员函数 test()

这也打印到 /var/log/php-fpm/www-error.log (如我的 www.conf 中所定义)

文件2:

class A {}

function test(A $obj) {
    echo 'here...';
}

var_dump('started');
$a = new A();
test($a);

var_dump('this is going to error out');
test($null);

var_dump('do we get here?');
Run Code Online (Sandbox Code Playgroud)

文件 2 输出:

字符串 'started' (length=7)
here...
string 'this is going to error out' (length=26)

没有错误记录。

/etc/php-fpm.d/www.conf 中的相关设置:

catch_workers_output = yesphp_flag[display_errors] = on
php_flag[display_startup_errors] = on
php_admin_value[error_reporting] = 1 …

php nginx php5 php-fpm

2
推荐指数
1
解决办法
4915
查看次数

使用 NGINX 的 php-fpm SERVER_NAME 子域

在我的 PHP 应用程序中:

die($_SERVER['SERVER_NAME']);
Run Code Online (Sandbox Code Playgroud)

请求:

sub1.example.com
Run Code Online (Sandbox Code Playgroud)

结果:

example.com
Run Code Online (Sandbox Code Playgroud)

我的 NGINX 配置:

server
{
    server_name .example.com;
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
    root /var/www/html/example;
    index index.php;

    location ~ \.php$ {
        if (-f $request_filename) {
            fastcgi_pass    127.0.0.1:9000;
        }
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }

    location / {
        if ($request_filename ~ /sub1) {
            rewrite ^ http://sub1.example.com/? permanent;
        }
        if ($request_filename ~ /sub2) {
            rewrite ^ http://sub2.example.com/? permanent;
        }
        if (!-f $request_filename) {
            rewrite ^(.*)$ /index.php last;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么子域没有在 php 中被拾取?

php nginx php-fpm

2
推荐指数
1
解决办法
8136
查看次数

如何提高具有大量并发用户的 Drupal 站点的性能?

我有一个 Drupal 站点,它在启动时可能会获得非常高的命中率。我们为首次发布租用了一个非常强大的服务器,之后我们将缩减规模。该服务器具有 Xeon E5-2670 8 核处理器 @ 2.6ghz 和 30gb RAM。

MySQL 已经获得了大量内存,我已经确认 MySQL 实际上是通过“top”使用这些内存的:

innodb_buffer_pool_size = 15G
Run Code Online (Sandbox Code Playgroud)

PHP 已经获得了大量内存(几乎可以肯定是太多了,因为我注意到评论说“每个脚本”):

memory_limit = 6000M
Run Code Online (Sandbox Code Playgroud)

Apache 配置是开箱即用的默认配置:

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
Run Code Online (Sandbox Code Playgroud)

我一直在运行 JMeter 测试(基本上“在站点上抛出尽可能多的线程并尽可能快地请求页面”)并且我可以看到性能随着并发用户数量的增加而下降:

  • 5 个用户:~1s 平均响应时间
  • 10 个用户:~1.3s 平均响应时间
  • 20 个用户:~2.5s 平均响应时间

但是,机器上的负载仍然很低。在测试期间,“top”报告有 26gb 的可用内存,“uptime”的平均负载不超过 0.63。我怀疑我们仍然有很多资源可以用来提高性能,但是 Apache 并没有充分利用这些资源。也就是说,我是一名开发人员而不是系统管理员,我也不是服务器性能方面的专家。

为了提高性能,我可以做出的最佳改进是什么?

mysql php performance drupal apache-2.2

2
推荐指数
1
解决办法
678
查看次数

PHP 不在特定目录上运行

好的。这是一个非常奇怪的错误:

我hello在/etc/apache2/sites-enabled/hello.php 中创建了一个名为“ ”的文件夹。然后我创建了一个别名,告诉/hello将转到/etc/apache2/sites-enabled/hello. 这解决了。

然后我尝试制作一个 VHost,它也能正常工作:

Alias /hello /etc/apache2/sites-enabled/hello
<VirtualHost *:80>
    ServerAdmin noobletadmin@YYYY.com
    DocumentRoot "/etc/apache2/sites-enabled/hello"
    ServerName comercial.YYYY.com
    ServerAlias ot.YYYY.com
    AddType application/x-httpd-php .php3 .php
    AddType application/x-httpd-php-source .phps
    <Directory /etc/apache2/sites-enabled/hello/>
        DirectoryIndex index.php
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但后来我读到这sites-enabled/仅适用于内部内容的 SymLink,sites-available所以我mv sites-*e/hello sites-available/hello制作了a2ensite hello,那时一切都崩溃了。

以前,PHP 运行良好,“hello”运行得非常好——现在就像没有 PHP 一样。PHP 很好,因为它是我拥有的本地文件的副本。没有错误出现.. 任何地方。我尝试过/var/log/apache/,但与我正在使用 spawns 的任何目录无关。

此外,在移动文件时(是的,我尝试了不同的位置),我注意到我public_html有以下权限方案:

drwxrwxr-x.  8 5500 www-data 4096 May  3 12:08 domain1_com
drwxrwxrwx   2 root root …
Run Code Online (Sandbox Code Playgroud)

php debian selinux apache-2.2

2
推荐指数
1
解决办法
1669
查看次数

是否有不止一种名为雾的配置技术?

我有一个 puppet 安装,我试图在其中检查雾版本(用于云配置),但没有得到响应,所以我认为它没有安装。我需要雾才能利用 puppet 的 vmware 克隆能力。无论如何,似乎雾是通过 ruby​​ gems 安装的,但是当我查看fog.io 时,它与我看到的其中涉及 php/apache/mysql 等的雾 wiki 页面并不相似,并且没有提及.fog 文件。因此,我正在努力确保我为我的人偶配置安装了正确的雾。

mysql cloud php puppet rubygems

2
推荐指数
1
解决办法
103
查看次数