我正在尝试设置 CentOS 5.5/64 位 VM 以使用 PHP 和 Perl 脚本访问远程 Oracle 数据库。(我没有使用Oracle的经验,之前只编程和管理过一些PostgreSQl和MySQL。)
我已经安装了以下 Oracle Instant Client rpm:
oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)
并将以下变量添加到我的 .bash_profile 中:
export TNS_ADMIN=/etc
export ORACLE_HOME=/usr/lib/oracle/11.2
export LD_LIBRARY_PATH=$ORACLE_HOME/client64/lib
PATH=$PATH:$HOME/bin:/sbin:$ORACLE_HOME/client64/bin
Run Code Online (Sandbox Code Playgroud)
/etc/tnsnames.ora我将从运行 Oracle 数据库的远程站点的同事那里收到的信息写入到该文件中:
some_string =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = my_address)(PORT = my_port))
)
(CONNECT_DATA =
(SERVICE_NAME = PDTT)
)
)
Run Code Online (Sandbox Code Playgroud)
好的部分是我现在可以通过运行从 CLI 进行连接
sqlplus 'my_user/my_password@//my_address:my_port/PDTT'
Run Code Online (Sandbox Code Playgroud)
然后可以通过发出以下命令查看一些表:
select table_name from user_tables;
Run Code Online (Sandbox Code Playgroud)
而且我已经sudo pecl install oci8成功运行,添加了包含以下内容的文件/etc/php.d/oci8.ini:
extension=oci8.so
Run Code Online (Sandbox Code Playgroud)
并可以看到以下 phpinfo() 输出
现在我的疑问和问题请: …
我在正确配置 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 和 …
我们从 PHP 应用程序发送带有 EXIM 4.71 的电子邮件。DKIM 已启用并正常工作,除非发送特定类型的邮件时,这会导致dkim=neutral (body hash did not verify)。
Received-SPF: pass (google.com: domain of no-reply@letsrace.se designates 2a02:750:5::256 as permitted sender) client-ip=2a02:750:5::256;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of no-reply@letsrace.se designates 2a02:750:5::256 as permitted sender) smtp.mail=no-reply@letsrace.se;
dkim=neutral (body hash did not verify) header.i=@letsrace.se
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=letsrace.se; s=dkim;
h=Content-Transfer-Encoding:Content-Type:Reply-To:From:Subject:To:Message-Id:Date; bh=9CkFmpgBio6ql+M36DtO8Gbw8keno3PlJ6db2JTrwy4=;
b=ILyB0JLZLWTig346yGWzmOwk+bEgr0k3hjYyPovA4B3+ggRshzTX9yDeAeklEmYaq4H768zZc0Vn6tR9YpngllkHJ6XTf3lTPr570yWOEhE8dvCkq+M0CBXmxEApHJmoKq2Oeh7sFCHVWGiN8JXYa8ohgsSFEd5Z+xHFlj3AvbI=;
Run Code Online (Sandbox Code Playgroud)
失败的电子邮件类型包含通过网站上的 HTML 表单输入的消息,并且从此应用程序发送的其他邮件都正常。我一直怀疑混合行结尾是罪魁祸首,但无法通过标准化行结尾来改善这种情况。
EXIM 在创建 DKIM 哈希后是否执行一些清理?
有任何想法吗?
我在 Ubuntu 12.04 上使用 WordPress,在我的 VPS 上使用 Nginx + php-fpm。有2个CPU核心+4096Mb内存。
我已将 mysql 数据库移至另一台服务器并设置远程访问。同时大约有 300 个在线访问者,php-fpm 使用的 CPU 确实很多:
我还对 WordPress 使用 APC-cache 和 batcache。
php-fpm 配置:
listen = /var/run/fpm-macradar.sock
;listen.backlog = -1
pm = ondemand
pm.max_children = 30
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 20
;pm.process_idle_timeout = 10s;
pm.max_requests = 500
pm.status_path = /status
chdir = /
request_slowlog_timeout = 60s
slowlog = /var/log/$pool.log.slow
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
;php_flag[display_errors] = off …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)