我已经编译了 PHP 5.3,除了从命令行运行 PHP 时,一切似乎都工作正常。
当我跑步时:
# php --ini
Run Code Online (Sandbox Code Playgroud)
它产生这样的输出:
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
Run Code Online (Sandbox Code Playgroud)
当我创建页面并输出 phpinfo(); 时 我得到这个输出:
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: /etc/php5/apache2/conf.d
Additional .ini files parsed: /etc/php5/apache2/conf.d/curl.ini, /etc/php5/apache2/conf.d/gd.ini, /etc/php5/apache2/conf.d/imagick.ini, /etc/php5/apache2/conf.d/memcache.ini, /etc/php5/apache2/conf.d/mhash.ini, /etc/php5/apache2/conf.d/ming.ini, /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/pdo_sqlite.ini, /etc/php5/apache2/conf.d/pspell.ini, /etc/php5/apache2/conf.d/recode.ini, /etc/php5/apache2/conf.d/snmp.ini, /etc/php5/apache2/conf.d/sqlite.ini, /etc/php5/apache2/conf.d/tidy.ini, /etc/php5/apache2/conf.d/xmlrpc.ini, /etc/php5/apache2/conf.d/xsl.ini
Run Code Online (Sandbox Code Playgroud)
我不明白为什么当通过 apache 执行 php 时会加载额外的 .ini 文件,而不是在使用 …
我在正确配置 Apache mod_proxy.so 以便按需要工作时遇到很多麻烦......
主要思想是在网络中的本地计算机上创建一个代理,该代理将能够在 PHP 中处理客户端请求(通过 Apache 准备的代理连接的客户端)。而且,它也有能力处理 PHP 上的服务器响应。
这是两个功能,它们彼此独立。
让我介绍一下我需要实现的目标:

正如您在这里看到的,有两种方法:蓝色一种和红色一种。
对于蓝色的,我基本上连接了本地网络(家庭)上的客户端(机器 B - 手机),并将其配置为通过代理,即同一网络上的机器 A(个人计算机)。
所以我们可以说(不是 DHCP):
机器 A: 192.168.1.40 --> Apache 正在该机器上运行,并配置为侦听端口 80。
机器 B(手机): 192.168.1.75 --> 配置为通过代理,即 IP 192.168.1.75 和端口 80(基本上是机器 A)。
正确配置 Apache 后,基本上是从 httpd.conf 中删除 mod_proxy.so(主要工作程序)、mod_proxy_connect.so(SSL、allowCONNECT,...)和 mod_proxy_http.so(需要处理 HTTP 请求/响应),在我的例子中,有这样的行:
# Implements a proxy/gateway for Apache.
Include "conf/extra/httpd-proxy.conf"
# Various default settings
Include "conf/extra/httpd-default.conf"
# Secure (SSL/TLS) connections
Include "conf/extra/httpd-ssl.conf"
Run Code Online (Sandbox Code Playgroud)
这使我能够配置文件 httpd-proxy.conf 来准备正向代理或反向代理。
所以我不确定我需要的是正向代理还是反向代理。
对于转发代理,我这样做了:
<IfModule proxy_module>
<IfModule proxy_http_module>
#
# FORWARD Proxy …Run Code Online (Sandbox Code Playgroud) 我的 Apache 错误日志偶尔会显示错误“发生脚本标头过早结束”,并且当发生这种情况时,我的网站似乎会向浏览器返回 500 内部服务器错误。奇怪的是,这种情况会持续几分钟,然后一切都会恢复正常。
我在 rhel 6.2 上使用 Apache 2.2.15 运行 php 5.3.3,但无法让 Apache 解释 PHP 代码。
没有错误(在系统日志、httpd/error_log 或 php_errors.log 中) - 我已在 php.ini 中启用错误报告:
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On
log_errors = On
error_log = /var/log/php_errors.log
Run Code Online (Sandbox Code Playgroud)
然而,当我直接从浏览器(例如 myserver.com/index.php)查看包含以下代码的 index.php 时,除了白屏之外什么都没有出现:
<?php echo 'Hello php World'; ?>
Run Code Online (Sandbox Code Playgroud)
当在命令行上执行 php 时,我得到了终端的预期文本输出(“ Hello php World”)。
当我将一些 HTML 添加到 index.php 时,如下所示:
<html>
<p>Hello from within html</p>
<?php echo 'Hello php World'; ?>
</html>
Run Code Online (Sandbox Code Playgroud)
并用我的浏览器查看它,它只返回“ Hello from within html。” 但是,当从命令行执行时,我得到:
<html>
<p>Hello from within …Run Code Online (Sandbox Code Playgroud) 我使用 Nginx 作为网络服务器来为我的网站提供服务。我向我的用户提供上传功能(允许他们提交最大 5Mb 的图片),因此我有指令:client_max_body_size 5M;在我的服务器配置中。我注意到,如果我尝试上传任何文件,网络服务器不会阻止上传更大的文件。举个例子,假设我尝试上传一个 700Mb 的大视频(电影)。服务器不会立即拒绝上传,但它会缓冲整个数据(花费很长时间并减慢服务器速度),并且仅在上传结束时才返回错误413 Request entity too large。
所以问题是:有没有办法正确配置Nginx,以在传输的数据开始超过我的client_max_body_size限制时阻止大文件上传?
我认为使用我的实际设置进行生产确实不安全,而且我在谷歌上找不到任何有用的东西。
编辑:
我使用 php 和 Symfony2 作为后端......
编辑(再次):
这是我的 error.log 中出现的内容:
2013/01/28 11:14:11 [error] 11328#0: *37 client intended to send too large body: 725207449 bytes, client: 33.33.33.1, server: www.local.example.com, request: "POST /app_dev.php/api/image/add/byuploader HTTP/1.1", host: "local.example.com", referrer: "http://local.example.com/app_dev.php/"`
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我正在监视我的 nginx error.log,并且tail -f error.log在上传开始时(在结束之前)立即出现该消息。所以 nginx 会进行某种预防性检查,但它不会停止/分块上传请求......
我还尝试通过在处理上传的页面上发出 a 来验证 php 是否获得上传的控制权echo 'something'; die();,但它没有打印出任何内容,也没有停止上传请求。所以应该是nginx或一些php内部使整个上传继续,直到完全传输......
另一个编辑:这是我的视图top(监视 nginx 和 …
我已经pecl_http使用 Amazon Linux php54-pecl-httpYum 包安装了 PHP 的扩展。
php -i显示http.ini加载的文件http.ini里面有这extension=http.so条线php -m 显示已安装的 HTTP 模块pecl list显示pecl_http 2.0.0beta1为已安装。然而,当我尝试使用它的函数- new HttpRequest(),http_build_url()等-他们回来是不存在的。我在 CLI 上运行所有内容(这是一个实用程序服务器),因此php.ini环境之间没有机会出现不同的文件。
php -i的 http 块指出:
http
HTTP Support => enabled
Extension Version => 2.0.0beta1
Used Library => Compiled => Linked
libz => 1.2.5 => 1.2.5
libcurl => 7.24.0 => 7.24.0
libevent => 1.4 or greater => 2.0.18-stable
libserf => disabled …Run Code Online (Sandbox Code Playgroud) 我当前的设置是用户使用 LDAP 凭据登录网站。这都是内部的,所以我不太关心证书。所以,在我的/etc/openldap/ldap.conf文件中我有TLS_REQCERT never. 在将其添加到文件之前,我总是收到错误Error Binding to LDAP: TLS: hostname does not match CN in peer certificate。添加后,一切似乎都工作正常。然而现在我发现一段时间后,也许几个小时到一天后,登录将再次失败,我将开始收到该错误。如果我重新启动 apache,一段时间内一切都会恢复正常。然后再次弹出错误。是什么导致这种情况持续发生?服务器是CentOS 6.5。
我开始使用 PHP 5.6 内置的 PHP OPcache,现在面临一个问题。我将其设置为最多使用 1 GB RAM,这对于我的网站来说已经足够了,但它永远无法使用完整的 1 GB RAM。在分配此限制之前,缓存会被清除多次,如您在 munin 图上看到的那样:
\n\n\n\n因此,每隔几天它就会从缓存中删除所有文件,然后重新开始缓存它们。
\n\n首先我认为问题出在变量上opcache.max_wasted_percentage,但它并不关心我设置的值。我的配置如下:
; configuration for php ZendOpcache module\n; priority=05\nzend_extension=opcache.so\nopcache.enable = 1\nopcache.enable_cli = 1\nopcache.memory_consumption = 1024\nopcache.interned_strings_buffer = 128\nopcache.blacklist_filename = /etc/php5/opcache_blacklist.txt\nopcache.max_accelerated_files = 65407\nopcache.revalidate_freq = 5\nopcache.fast_shutdown = 1\nopcache.max_wasted_percentage = 50\nopcache.enable_file_override = 1\nRun Code Online (Sandbox Code Playgroud)\n\n我\xe2\x80\x99m在带有nginx和FastCGI的最新Debian Jessie环境中使用它。
\n\n我想实现只有当内存消耗达到 1 GB 时才清除缓存。我已经尝试过一个非常小的配置,如下所示:
\n\n; configuration for php ZendOpcache module\n; priority=05\nzend_extension=opcache.so\nopcache.enable = 1\nopcache.enable_cli = 1\nopcache.memory_consumption = 1024\nRun Code Online (Sandbox Code Playgroud)\n\n即便如此,问题仍然存在。
\n\n如果需要 FPM 配置:
\n\nuser …Run Code Online (Sandbox Code Playgroud) 我的服务器使用的是 DigitalOcean,计划如下:
2 Core Processor
2 GB Memory
Run Code Online (Sandbox Code Playgroud)
我的网站收到了数千名访问者,但是,两个 CPU 核心都是 @ 100%:
问题似乎在于php-fpm和nginx: worker process。我对我的服务器做了几十次优化,但我仍然无法让它平静下来。
这是我的nginx.conf:
user www-data;
worker_processes 2;
pid /run/nginx.pid;
events {
worker_connections 2048;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log off;
error_log /var/log/nginx/error.log;
## …Run Code Online (Sandbox Code Playgroud) 我有一个由 Laravel 提供支持的 Web 应用程序,该应用程序设置在 AWS ECS 上。我需要将 artisan 命令作为 cronjob 运行。
我正在查看 ECS 集群配置中的“计划任务”。我可以按照 AWS 上的“计划任务 (Cron) ”文档启动新任务。我在目标中使用 Laravel 的任务定义,我将其用于 Web 服务,它有两个任务。
任何帮助将不胜感激。谢谢。
php ×10
apache-2.2 ×4
nginx ×2
php-fpm ×2
amazon-ami ×1
amazon-ecs ×1
centos6.5 ×1
cron ×1
limitations ×1
memory ×1
opcache ×1
openldap ×1
pecl ×1
performance ×1
php-cli ×1
process ×1
proxy ×1
ubuntu ×1
unix ×1
upload ×1