国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal问题] Sendmail引起Drupal 7网站注册慢的解决办法

[复制链接]
发表于 11-30-2011 06:16 | 显示全部楼层 |阅读模式
  • 现 象
    & Z0 O9 N2 _* R% c. X2 S

    ( o% {5 H9 e2 u7 p$ l, q
      P$ q$ M. H6 J" ggoseas网站注册时,在创建用户账号的时候非常慢,会引起nginx服务器的错误(504,Gateway Timeout),
    2 F/ G/ ~. k. J" X2 `/ r2 R8 d; x1 t

    3 [! ~7 O% A+ C8 ]+ Z$ x6 |查看日志,发现nginx从客户端取Post的数据时出现Timeout!错误信息如下:

    0 i, u/ V9 v7 c5 T) J8 c
    + T9 ~, X' O9 ~& O3 w9 {: e% \(upstream timed out (110: Connection timed out) while

    + B' V" x- _  K* q
    2 Y$ D; A$ x3 ereading response header from upstream)
, i; k8 `6 T& ^' b0 X, _

9 D1 n  u  @7 q# Y3 B" _1 q. w+ }) w) |# R

3 B. }+ O4 M% f
  • 解决过程8 e9 R7 X7 {1 T- y  i" w4 b: w
    3 A% A$ G  S& f" l( I! s2 G
    6 F9 x( O) _9 O8 ^5 r0 p9 D1 y, d
    7 J& V" G5 y6 _% P: n
    重新配置nginx服务器,加到fast_cgi_buffers等的设置,问题依然存在,我只好重新安装Drupal7,

    3 {/ [3 x4 A3 U! P" q8 l4 z( o9 a3 r
    在没有使用任何第三方模块(Module)的情况下注册,一样非常慢,这时,我把注意力放到MySQL上,

    3 y* I3 F8 K4 w- {" Q0 }
    " A: ?# }8 J8 ]% g- B0 A$ n, X曾经在游戏项目的经验,MySQL的死锁会引起另一个Insert操作非常慢,但在这样的网站上,
    9 z) E2 S# C4 ?8 m9 v' m
    2 l8 A% ^$ s$ B) n
    数据的Insert是相当少的,不大可能引起这样的问题,不过我还是试试打开InnoDB,手工Insert也
      V; z  [1 T& k" `2 w/ o

    + t8 ]: R9 ?8 x: i  ~# B, j没有问题,那问题在哪呢?
    ( c1 l! Z1 m" ^7 @
    ' G! ?1 k# C# D4 J* C2 x- l
    我另外配置了Apache,在Apache下使用全新的Drupal7,问题一样存在!

    . V# W- R8 z- D3 J) t
    $ N) ?0 G) x6 d! q这时我把注意力放到邮件上,注册会发送邮件给用户以及管理员!找到一个发邮件的php代码,

    - V& L, ~1 E2 }
    ' d9 b5 z* _4 m9 x( T. [7 qmail.php:
    & K* }# t$ `/ ?3 ]* _  Z
    - u% U6 b& l: @" q' d
    #!/usr/bin/php
    % p; B0 m' i5 X! O, t7 c0 v<?php7 |1 C$ `3 R( G% E+ y+ F, F
    $to = 'thegosea@gmail.com';
    : n. z4 Y& X# y/ h$subject = 'Test email';9 C1 [7 c& n' \5 \, R
    $message = "Hello Worldaa!\n\nThis is my first mail.";
    % m) V. P4 \/ _$headers = "From: webmaster@goseas.com\r\nReply-To: webmaster@example.com";
    # \: s: P- `- r% U( n8 ?$mail_sent = @mail( $to, $subject, $message, $headers );3 n7 G! p1 \/ V/ ~
    echo $mail_sent ? "Mail sent" : "Mail failed";
    4 m3 u  I1 j* t0 t?>

    . v$ ?: W) A; U4 Z
    : `3 |' P& v1 n3 x: \% U这段代码在开发环境中,发送很快,立即返回Mail send消息,但在服务器上,却一直卡住不动,有时

    2 A% N+ A% j$ [+ ^" H. V( h0 E; h* Y/ K: P
    会发送成功,但差不多要40-60秒,有时没有Mail send消息输出,总算找到问题所在了!

    * D5 u: p  C- c- J  k, E4 o0 n0 i& _% I3 u4 k: y  U
    root@goseas:~# sendmail -d8.7

    $ x3 ~* ~" q3 x# I. f) p/ t8 g  Y* c, A: i
       getmxrr([goseas], droplocalhost=1)$ V! B6 ]9 P3 r6 k# ^, T1 ^
       dns_getcanonname(goseas, trymx=0)5 Q; o$ D0 o) ~; p9 Z/ M
       NO: errno=0, h_errno=1

    . o' Y: ~" z# z% e* f
    : \9 @, h3 j3 O& L- ]" Rsendmail -d8.7输出dns_getcanonname,请求goseas的ip地址,goseas在本机的地址,为会sendmail会向

    + {: N  I, {1 D6 O: }8 Q# X
    1 ^4 O& B. {, A, I2 ^" ?DNS服务器请求呢?而我设置的DNS是正常的,如果需要发送请求,也应该是发送goseas.com才行,问题

    ) p' D( W2 k# D2 {, ]8 h0 z3 u+ U, b4 t
    就出在这里了,先查看到sendmail手册,说是FQDN问题,按FQDN问题解决办法,配置好Sendmail的FQDN,

    + a$ ?" D& o: l2 O$ }
    7 F! ^8 ~& L* H/ d问题却依然存在!

    5 j# E' F  M$ z" z
    ) }+ T$ o/ ?: e8 W3 w
    .(define(`confDOMAIN_NAME', `goseas.com')dnl

    * _1 K) q/ T, C$ l* o
    % w) \. A& r: [. f. e这个配置一定要留意引号,一个是反引号,一个是正引号,相当邪恶的用法

    : K+ ^) Q7 C% r0 R1 d# ^. T  K$ t9 S5 I( M% O5 v0 X
    root@goseas:~# sendmail -d 21.2
    ) w" F5 x. `4 Z" r

    ) e) v. c2 E1 O; V- F3 u
    (short domain name) $w = goseas
    - x" u" K9 _( Q  A6 }$ |7 v( Y( j(canonical domain name) $j = goseas
    ' e4 V5 N/ s& e4 l/ C- J: \/ R" [(subdomain name) $m = goseas
    ' S  `+ m/ l0 Y! p# Q$ h0 C) r(node name) $k = goseas

    0 H, Z! a3 `; r! j# `* r3 m" O
    9 F+ K+ k7 ^- C1 esendmail -d 21.2的输出一样证实了问题所在,对比开发环境,开发环境上的输出是
    + a0 z! ?1 d1 i! m  q! V) w
    * N8 N3 u& |. S* r6 N3 B7 J
    (short domain name) $w = localhost6# t# w" p4 D" v  O1 D- W
    (canonical domain name) $j = localhost6.localdomain6; T0 D# T! s' t5 N
    (subdomain name) $m = localdomain6& k  w: W3 j& c, G2 I! p4 T
    (node name) $k = goseas

    3 S$ U7 ?- @9 U  O' F; N$ Q4 `2 f2 h  O+ W6 X: i# @, ~: l- f
    这时我把注意力放到localhost6上了,服务器与开发环境都没有开通IPv6,但网卡现在都有对IPv6的支持,

    / R# a3 x7 R$ {- q9 O+ y- [
    1 H' ^5 N. J2 a# a3 F7 F/ n/ t打开服务器的/etc/hosts,发现没有ipv6 localhost6的设置,也难怪sendmail去请求DNS,它是依domain name
    ( z" P0 q; Q8 s# ^0 {% T/ S+ X

    1 Q% y; R- V% r9 z去找地址的,如果有ipv6的本机默认地址的设置,就直接请求到本机的地址了,localhost6的本机地址是
    ) \' k' j1 |, @

    8 `1 Z' }) O' o# L0 I% R3 A, A  @; D::1,将/etc/hosts加上一行:
    - Q3 O+ v' H) G  ?( ^
    9 |+ _6 q, I: D5 r, \
    ::1 goseas localhost6.localdomain6 localhost6

    ) l8 i0 P2 _" C( @3 W# K& r  Z  O3 i; }& N+ T8 K' [
    sendmail -d8.7输出:
    0 X+ I7 V6 ?, i( M* M

    # l. ]& x" K9 h/ {
    _res.options = 812c1, HasWildcardMX = 0
    * E3 _8 p% H+ g9 y6 a  R. v, k& BRecipient names must be specified
    9 x( g2 |6 I% p. ?$ z7 V! S0 p
    0 n2 B0 ~* t9 m  R; x+ H7 r0 D( s' [
    这就是正常的输出了!再调用mail.php,邮件发送正常!测试网站的注册,10秒左右,就返回注册成功的消息!
6 r7 F# B; w- z# Z) t4 n( |/ U

8 {- S1 i& j4 ]. Q; m9 l3 c0 W" B) M# e% t% j6 u

0 L- h; Z2 m* H& t% ]. X+ Z; P2 h5 w% Q

|2011-2026-版权声明|平台(网站)公约|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 2-19-2025 14:00 , Processed in 0.812752 second(s), 444 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表