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

    技术2022-06-30  71

    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 postmaster@mydomain.com

        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)


    最新回复(0)