我在正确配置 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 和 …
我正在使用带有 IIS 8 的 Windows Server 2012。
我通过 Web 平台安装程序安装了 PHP 5.5,除了“用于 IIS 的 PHP 管理器”之外,所有安装都成功。
任何想法为什么?下面我将插入日志:
=== Verbose logging started: 7/27/2014 0:58:28 Build type: SHIP UNICODE 5.00.9600.00 Calling process: C:\Windows\system32\inetsrv\InetMgr.exe ===
MSI (c) (A4:94) [00:58:28:434]: Resetting cached policy values
MSI (c) (A4:94) [00:58:28:434]: Machine policy value 'Debug' is 0
MSI (c) (A4:94) [00:58:28:434]: ******* RunEngine:
******* Product: C:\Users\Administrator\AppData\Local\Microsoft\Web Platform Installer\installers\PHPManager\58698059E6E09CCF19706DBF8B1331AB51BCC662\PHPManagerForIIS-1.2.0-x64.msi
******* Action:
******* CommandLine: **********
MSI (c) (A4:94) [00:58:28:434]: Client-side and UI is none or basic: Running entire install …Run Code Online (Sandbox Code Playgroud) 服务器信息(删除了 DNS 和 IP):
cat /proc/version && uname -a && java -version
Linux version 2.6.16.33-xenU (*************) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #2 SMP Wed Aug 15 17:27:36 SAST 2007
Linux ************* *************-xenU #2 SMP Wed Aug 15 17:27:36 SAST 2007 x86_64 x86_64 x86_64 GNU/Linux
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我有一些 PHP 代码正在读取 Excel 文件并进行字符串比较。由于似乎是语言环境问题,它在服务器上失败。然而,在我的本地机器(OSX 10.8.5 Mountain Lion)上,它可以工作!
在我的本地机器上,语言环境是 en_US.UTF-8。在服务器上,语言环境是 POSIX,但我将其更改为 en_US.utf8,因为当我查看locale -a时没有 en_US.UTF-8 …
我正在尝试编写一个脚本,以便使用 php55 和 Amazon PHP sdk 启动新的 Amazon Linux EC2 实例。但是,我遇到了一个我认为是由 PHP 版本冲突引起的问题。我认为 yum 在这种情况下是如何工作的,我缺少一些东西。
归结为最简单的情况,如果我运行:
yum install -y httpd24 php55 php-amazon-sdk2
Run Code Online (Sandbox Code Playgroud)
我收到“错误:php55-common 与 php-common-5.3.29-1.7.amzn1.x86_64 冲突”
但是,如果我运行:
yum install -y httpd24 php55
Run Code Online (Sandbox Code Playgroud)
然后分别运行:
yum install -y php-amazon-sdk2
Run Code Online (Sandbox Code Playgroud)
它工作得很好。需要明确的是,当我运行这些命令时,系统上根本没有 PHP 版本,所以它与已经存在的东西没有冲突。
我对 yum 依赖项的工作方式不是很熟悉,但这似乎表明 php-amazon-sdk2 对 php55 很好,但由于某种原因,如果我同时安装它,它会试图强制 php53。解决此问题的正确方法是什么(意思是,我不想只是强制安装它,忽略依赖项,但我也不想在单独的步骤中执行这些操作)?
操作系统:CentOS 7
nginx:1.6.2
httpd:apache 2.4.6
cms:Drupal 7
在我的服务器遭到入侵后,我从服务器中删除了所有内容,重新安装了操作系统和软件,并从备份中恢复了数据。现在我以最大安全性方式配置所有服务。
在详细研究访问日志后 - 我决定拒绝任何对 php 文件的请求,除了位于站点文档根目录中的index.php以提高安全性。
Nginx 访问日志内容很多,比如:
azenv2.php
az.php
Run Code Online (Sandbox Code Playgroud)
和
/*/wp-login.php
/administrator/index.php
/MyAdmin/index.php
Run Code Online (Sandbox Code Playgroud)
第一类 - 后门(其中一个入侵了我的网站,有人从我的服务器发送了大量垃圾邮件)。
第二 - 有人想找到流行的 cms 和实用程序并尝试使用 login@password,例如 admin@123456
我通过拒绝对 php 文件的请求来阻止这两个类别的原因是:
即使有人会上传 php-shell -也不可能使用它。
所有这些请求都是“不好的”修道院 - 由 nginx 拒绝它们将保护 drupal(httpd+php+mysql) 工作并消耗能量。
我当前对一台虚拟主机的配置:
server {
listen <server-ip>;
server_name <site-name>;
location ~* /sites/default/files/styles/ {
try_files $uri @imagestyles;
}
location @imagestyles {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
access_log off;
}
location …Run Code Online (Sandbox Code Playgroud) 在 Windows 上从 PHP 版本 5.4.32 升级到 PHP 版本 5.5.22 的正确方法是什么?我能找到的只是如何安装。
PHP 已经与 IIS 一起在 Windows Server 2008 R2 64 位上运行,只需要移动到更新版本的 PHP
由于马克和他之前的回答对我希望实现的目标有了更好的理解,我发布了一个(希望)更清晰且略有不同的变化,因为该线程已达到饱和;
我正在尝试在 nginx 服务器上运行多个 WordPress 站点,其中每个站点都需要不同版本的 PHP。我希望通过使用多个版本的 PHP-FPM 来实现这一点,每个版本都运行不同版本的 PHP,与 nginx 分开。
然后我想使用.conf文件来控制每个站点使用的 PHP-FPM 服务器,允许该站点在所需的 PHP 版本上运行。(根据评论区)
目前我的 testsite1 服务器块看起来像这样,运行默认的 PHP 版本。
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/testsite1;
index index.php index.html index.htm;
server_name local.testsite1.com;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock; …Run Code Online (Sandbox Code Playgroud) php ×10
apache-2.2 ×3
nginx ×3
iis ×2
amazon-ec2 ×1
charset ×1
drupal ×1
encoding ×1
iis-7 ×1
limitations ×1
localization ×1
php-cli ×1
php-fpm ×1
php5 ×1
process ×1
proxy ×1
security ×1
unix ×1
upload ×1
utf-8 ×1