Windows下Nginx的安装与使用(一):配置端口转发

什么是端口转发

咱们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口。此时若是咱们能够经过:nginx

localhost:8001    //图书
localhost:8002    //电影

但咱们通常访问应用的时候都是但愿不加端口就访问域名,也即两个应用都经过 80 端口访问。但咱们知道服务器上的一个端口只能被一个程序使用,这时候如何该怎么办呢?一个经常使用的方法是用 Nginx 进行端口转发。Nginx 的实现原理是:用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与其配置文件进行匹配并转发给对应的应用。例如当用户访问 book.douban.com 时,Nginx 从配置文件中知道这个是图书应用的 HTTP 请求,因而将此请求转发给 8001 端口的应用处理。当用户访问 movie.douban.com 时,Nginx 从配置文件中知道这个是电影应用的 HTTP 请求,因而将此请求转发给 8002 端口的应用处理。一个简单的 Nginx 配置文件(部分)以下面所示:web

#配置负载均衡池
#Demo1负载均衡池
upstream book_pool{
    server 127.0.0.1:8001;
}
#Demo2负载均衡池
upstream movie_pool{
    server 127.0.0.1:8002;
}

#Demo1端口转发
server {
    listen       80;
    server_name  book.chanshuyi.com;
    access_log logs/book.log;
    error_log logs/book.error;
    
    #将全部请求转发给demo_pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://book_pool;
    }
}
#Demo2端口转发
server {
    listen       80;
    server_name  movie.chanshuyi.com;
    access_log logs/movie.log;
    error_log logs/movie.error;
    
    #将全部请求转发给demo_pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://movie_pool;
    }
}    

 

上面这段配置实现了:浏览器

一、当用户访问的域名是:http://book.chanshuyi.com 时,咱们自动将其请求转发给端口号为 8001 的 Tomcat 应用处理。tomcat

二、当用户访问的域名是:http://movie.chanshuyi.com 时,咱们自动将其请求转发给端口号为 8002 的 Tomcat 应用处理。服务器

上面的这种技术实现就是端口转发。端口转发指的是由软件统一监听某个域名上的某个端口(通常是80端口),当访问服务器的域名和端口符合要求时,就按照配置转发给指定的 Tomcat 服务器处理。咱们经常使用的 Nginx 也有端口转发功能。并发

用 Nginx 实现端口转发

下面咱们将从零开始,讲解如何配置端口转发。app

首先去 Nginx 官网下载一个 Windows 版本的 Nginx,或者直接点击这里下载。这里咱们用的是 Nginx1.8 负载均衡

下载解压以后的目录结构以下:测试

其中 conf 目录存放的是 Nginx 的配置文件,logs 存放的是 Nginx 的日志文件。spa

下面咱们先模拟两个 tomcat 应用。到这里下载 tomcat604401.zip 和 tomcat604402.zip,它们是两个简单的Web项目,咱们将经过他们来测试 Nginx 的配置是否成功。

下载以后直接运行两个 tomcat 下面的 bin/startup.bat,而后访问下面的连接看是否应用是否正常启动:

http://localhost:8001/

http://localhost:8002/

正常状况下会访问到具体的页面:

若是能看到上面的页面,那说明 tomcat 启动成功了。

下面咱们进行 Nginx 配置,来实现端口转发。把下面的内容复制并覆盖 conf/nginx.conf 文件:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65; 
    
    
    #配置负载均衡池
    #Demo1负载均衡池
    upstream book_pool{
        server 127.0.0.1:8001;
    }
    #Demo2负载均衡池
    upstream movie_pool{
        server 127.0.0.1:8002;
    }
    
    #Demo1端口转发
    server {
        listen       80;
        server_name  book.chanshuyi.com;
        access_log logs/book.log;
        error_log logs/book.error;
        
        #将全部请求转发给demo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://book_pool;
        }
    }
    #Demo2端口转发
    server {
        listen       80;
        server_name  movie.chanshuyi.com;
        access_log logs/movie.log;
        error_log logs/movie.error;
        
        #将全部请求转发给demo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://movie_pool;
        }
    }
}

以后双击 nginx.exe 启动 Nginx。打开 Windows 任务管理器,若是看到 nginx 的进程,那么说明启动成功了,不然根据 logs 文件夹下的日志文件进行修改。

以后打开 C:\Windows\System32\drivers\etc\hosts 文件,添加如下配置:

# Set the Domain Redirect
127.0.0.1 book.chanshuyi.com movie.chanshuyi.com

(设置 host 主要是为了使域名重定向。进行了上述配置以后,在本机访问  book.chanshuyi.com movie.chanshuyi.com 的时候,系统会将请求转发给指定IP的服务器,而不是经过DNS服务器解析。经过设置 HOST,咱们即便没有域名,也能够在本机用域名的方式访问本身启动的应用程序。)

以后咱们打开浏览器,输入以下地址访问:

http://book.chanshuyi.com

http://movie.chanshuyi.com

[MARK PIC1]

[MARK PIC2]

若是你成功看到以上页面,那说明 Nginx 成功启动并配置成功了。

Nginx 端口转发原理

下面咱们来看看从发送 HTTP 请求到具体的 tomcat 应用处理的整个流程。

在本例中,当咱们启动 Nginx 时, Nginx 就启动线程不断地监听 80 端口。用户浏览器发送 book.chanshuyi.com 请求,服务器接收到用户的 HTTP 请求时 Nginx 也监听到了这一时间。因而 Nginx 从 HTTP 请求头中取出用户请求的 server_name,并与配置文件中配置的进行匹配,若是匹配成功,那么就将请求转发给对应的应用服务器处理。不然 Nginx 将这次请求转发给配置文件中配置的第一个 server。

例如:用户经过浏览器发送 book.chanshuyi.com 请求,Nginx 监听到服务器 80 端口上的请求,并根据配置文件寻找对应的server。

#Demo1端口转发
server {
    listen       80;
    server_name  book.chanshuyi.com;
    access_log logs/book.log;
    error_log logs/book.error;
    
    #将全部请求转发给demo_pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://book_pool;
    }
}

 

Nginx 找到了对应的server,并发现对应的 server 配置了一个负载均衡池 book_pool。因而它将此请求分配给负载均衡池的应用服务器处理,即本机上端口为 8001 的应用服务器。

#Demo1负载均衡池
upstream book_pool{
    server 127.0.0.1:8001;
}

到这里关于端口转发就结束了。咱们将在下一篇中介绍如何进行负载均衡的配置。

 

参考资料:

1.http://blog.csdn.net/agangdi/article/details/40921199 

相关文章
相关标签/搜索