在同一台服务器上使用 Nginx 和 Apache 是否存在潜在问题?

在同一台服务器上使用 Nginx 和 Apache 是否存在潜在问题?

我安装了 nginx 来与 apache 一起处理请求。以前,apache 监听端口 80,现在我已切换到 nginx 监听端口 80,而 apache 监听一些不知名的端口,如果请求的是非静态内容,则让 nginx proxy_pass 到 apache。

我的 nginx 配置包含以下内容:

server {
    listen 80;
    server_name static.test.domain.com;
    location / {
        root   /home/test/www/static;
        index  index.html index.htm;
    }

}

server {
    listen       80;
    server_name domain.com *.domain.com;
    location /
    {
        proxy_set_header Server "testserver";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8800;

    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

apache vhost 配置如下:

NameVirtualHost *:8800

<VirtualHost *:8800>
  DocumentRoot /var/www/html
  ServerName domain.com
  ServerAlias www.domain.com
</VirtualHost>

<VirtualHost *:8800>
  DocumentRoot /home/test/www
  ServerName test.domain.com
</VirtualHost>

...

我注意到请求现在更快了,但我还注意到 nginx 显示在服务器字段的所有请求标头中,即使请求的是非静态页面。这是一个潜在的问题吗?我见过一些服务器在与我的设置相同的 IP 上使用 nginx,但服务器字段不同(如果是非静态内容请求,Apache 会显示,如果是静态内容请求,nginx 会显示)。

此外,我正在使用 APC 进行操作码缓存,并在站点目录中使用 .htaccess 和一些重定向规则(我想我需要将一些 apache 规则移植到 nginx?有必要吗?)。我还运行了一些 Java cron 脚本(这会阻碍 nginx 进程吗?)这种新设置会导致潜在问题吗?

我知道有很多问题。不过还是提前谢谢您!

更多信息:在 Centos 5 32 位上运行 nginx 1.0.6 和 apache 2.2。

我的.htaccess 文件(其中一些是否需要移植到 apache?):

# BEGIN Compress text files
<ifModule mod_deflate.c>
  <filesMatch "\.(css|js|x?html?|php)$">
    SetOutputFilter DEFLATE
  </filesMatch>
</ifModule>
# END Compress text files


# BEGIN Expire headers
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 604800 seconds"
  ExpiresByType application/javascript "access plus 604800 seconds"
  ExpiresByType application/x-javascript "access plus 604800 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
# END Expire headers


# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "max-age=604800, public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "max-age=604800, private"
  </filesMatch>
</ifModule>
# END Cache-Control Headers


# BEGIN Turn ETags Off
<ifModule mod_headers.c>
  Header unset ETag
</ifModule>
FileETag None
# END Turn ETags Off

答案1

考虑mod_rpaf为 Apache 安装,这将帮助您在 Apache 访问日志中获取客户端的 IP 地址,而不是服务器的 IP 地址(从技术上讲,nginx 从 Apache 请求网页,因此 Apache 会将其 IP 识别为客户端 IP,而无需mod_rpaf)。这是我能想到的您的设置唯一可能存在的问题,其他一切看起来都正确。在每个标头中都有 nginx 是正确的,因为 nginx 充当每个网页(静态和动态)的前端。

相关内容