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)