nginx 反向代理之使用特定目录和处理程序

nginx 的反向代理概念

还是先来介绍下环境:

(原文链接 http://ddbiz.com/?p=133)

1. nginx 作为web服务器

 

2. qmail-toaster 

qmail-toaster中提供的邮件管理是cgi方式的,比如 qmailadmin, qmaillog等,这些内容可是说是和 httpd 绑定在一起的(httpd 的效率还是不错的)。但是新环境中,我们采用了 nginx 作为web的代理服务器,因此对qmail的管理只有通过两种方式实现:

2.1 用httpd 在不同的web port来实现管理,比如 8008,并对公网开放

对于安全人员来说,服务器上开放的端口和运行的程序,对公网的可见性越少越好,所以2.1并不是一个理想的方案

 

2.2 使用 nginx 的代理,把请求转向内网的 httpd 处理程序

httpd 作为内网的服务器运行,nginx 负责处理请求的转发。这也是本文要实现的。

 

3. 设置 nginx 代理

httpd 运行在 8000 端口,/webmail是 squirrelmail 的访问路径

nginx 运行在 80 端口。

 

3.1 通过域名的代理服务

使用域名来代理特定的服务,首先httpd也要做相应的设置,如:

===============httpd-vhosts.conf================

 

NameVirtualHost *:8000

 

<VirtualHost *:8000>

    ServerAdmin [email protected]

    DocumentRoot /usr/share/squirrelmail

    ServerName mail.ouroptical.com

    ErrorLog "logs/mail.error.log"

    CustomLog "logs/mail.access.log" common

 

    <Directory "/usr/share/squirrelmail">

       DirectoryIndex index.php

       Options FollowSymlinks

       Order allow,deny

       allow from all

    </Directory>

</VirtualHost>

================httpd-vhosts.conf================

 

然后把特定的请求通过nginx转发到httpd

================nginx-vhosts.conf================

 

server{

        listen  80;

        server_name     mail.mydomain.com;

        index   index.php;

        root    /usr/share/squirrelmail;

        access_log      logs/mydomain.access.log opticslog;

        error_log       logs/mydomain.error.log;

        #limit_conn     one     10;

        error_page      404     /404.html;

        error_page      403     /403.html;

        sendfile        off;

 

        location / {

                proxy_pass http://mail.mydomain.com:8000/;

        }

#

## 或者使用此格式

##

location / {

# proxy_pass http://127.0.0.1:8000/;

# proxy_set_header Host  $host;

# }

 

        location ^~ /qmailadmin/ {

                proxy_pass http://127.0.0.1:8000/qmailadmin/;

        }

}

3.2 通过目录的代理
server{
        listen  80;
        server_name mydomain.com;
        index   index.php;
        location ^~ /webmail/ {
                proxy_pass http://127.0.0.1:8000/webmail/;
        }
        location ^~ /qmailadmin/ {
                proxy_pass http://127.0.0.1:8000/qmailadmin/;
        }
        location ~ /.php$ {
                include php-fastcgi.conf;
        }
}

(原文链接 http://ddbiz.com/?p=133)

你可能感兴趣的:(nginx 反向代理之使用特定目录和处理程序)