AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 26248
Accepted
user9598
user9598
Asked: 2009-06-16 15:20:10 +0800 CST2009-06-16 15:20:10 +0800 CST 2009-06-16 15:20:10 +0800 CST

什么可能导致 Apache 的时间/时区间歇性变化?

  • 772

我运行一个服务器,上面有一些 PHP 驱动的论坛(Vanilla 1.1.5a),我最近注意到它们上的帖子出现了乱序。一些挖掘显示,Apache 似乎在没有明显模式的情况下将当前时区从 +0000 到 -0500 来回更改,这可以在如下日志条目中看到:

38.104.58.202 - - [15/Jun/2009:22:40:05 +0000] "GET /extensions/MembersList/library/paginate.js HTTP/1.1" 200 22880 "http://mysite.com/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b99) Gecko/20090605 Firefox/3.5b99"
38.104.58.202 - - [15/Jun/2009:17:40:05 -0500] "GET /extensions/JQuery/jquery-1.2.6.min.js HTTP/1.1" 200 55804 "http://mysite.com/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b99) Gecko/20090605 Firefox/3.5b99"

虽然针对时区差异调整的时间是相同的,但似乎导致 PHP 的日期函数返回本地未调整的时间(随后论坛数据中发生时间扭曲混乱)。

我还在同一个 VirtualHost 上运行基于 Django 的 mod_python 应用程序。配置如下所示:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost        
  DocumentRoot /var/www/

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
   </Directory>

    ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

  Alias /doc/ "/usr/share/doc/"
  <Directory "/usr/share/doc/">
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
  </Directory>

  Alias /media/ "/usr/share/python-support/python-django/django/contrib/admin/media/"
  <Directory /usr/share/python-support/python-django/django/contrib/admin/media/>
              Options Indexes FollowSymLinks MultiViews
              AllowOverride None
              Order allow,deny
              allow from all
  </Directory>

  RedirectMatch ^/raid-scheduler$ "/raid-scheduler/"
  <Location "/raid-scheduler/">
       SetHandler python-program
       PythonHandler django.core.handlers.modpython
       SetEnv DJANGO_SETTINGS_MODULE raid_scheduler.settings
       PythonOption django.root /raid-scheduler
       PythonDebug On
   PythonPath "['/opt', '/opt/raid_scheduler'] + sys.path"
   </Location>
</VirtualHost>

关于可能导致这种情况的任何想法?

apache-2.2 mod-php
  • 4 4 个回答
  • 8252 Views

4 个回答

  • Voted
  1. Best Answer
    brian-brazil
    2009-06-16T15:29:48+08:002009-06-16T15:29:48+08:00

    可能是其他一些请求正在设置 TZ 并且它被遗弃了吗?getenv('TZ')在每个请求的开头记录可以验证这一点,并且putenv可以用来解决它。

    • 3
  2. kubanczyk
    2009-06-16T15:43:04+08:002009-06-16T15:43:04+08:00

    在 Unix/Linux 中,每个进程都可以在不同的时区运行。这是因为根据进程环境中可能存在的 $TZ 变量的内容,系统时间相关函数会更改它们的返回值(这既不是 PHP 特定的,也不是 Apache 特定的)。可能 $TZ 在您的一个或多个 Apache 进程中被修改。mod_php 和 mod_python 都是 Apache 进程的一部分,因此它们可以自由修改 $TZ。

    您可以通过 posix_getpid() 将 getenv('TZ') 与 Apache 进程 ID 一起打印到日志中,以便用于匹配各种用户请求吗?

    • 3
  3. Martin P. Hellwig
    2009-06-16T15:25:28+08:002009-06-16T15:25:28+08:00

    我认为这与您的 php 设置有关。查看 mod_php "TZ" 环境变量。

    • 0
  4. Graham Dumpleton
    2009-06-25T20:52:37+08:002009-06-25T20:52:37+08:00

    TZ 环境变量以及与语言和区域设置相关的各种环境变量都是进程全局的。因此,在同一进程中运行多个应用程序实例,无论是 Python 还是 PHP,想要不同地设置它都会导致问题。此问题也会影响 mod_wsgi,并在以下内容中进行了讨论:

    http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Timezone_and_Locale_Settings

    请注意,尝试通过从 Python Web 应用程序内部查看 os.environ 来验证事情可能无济于事,因为 os.environ 是创建 Python(子)解释器实例时进程环境变量的副本。因此,对 TZ 或其他环境变量的任何更改都不会反映在 Python os.environ 字典中。特定值的唯一时间同步发生在 os.environ 中的值更新时,在这种情况下,Python 也会调用 C 级别的 putenv() 函数。

    • 0

相关问题

  • 在您分发的应用程序中使用 Apache HTTPD 运行 SSL 的最佳方式是什么?

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve