您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Web 服务器:NGINX

前面讲过的 Httpd 和 Tomcat 以及这个小节所讲的 都是 Web 服务器,他们三者发展到今天并没有很明显地成为某个产品一枝独秀的强垄断局面,因为他们有各自的特点和适用的场合,在某些场合他们甚至可以共用达到互补的。

是由俄罗斯工程师伊戈尔·赛索耶夫开发的,同样是开源免费的。虽然它和 Httpd 与 Tomcat 都称为 Web 服务器,但是它的强大得简直不像是个 Web 服务器,比如它的反向代理和均衡,几乎成了现在 Web 应用的必备基础设施。与此同时它的高并发处理能力也是很强大的,是 Httpd 强有力的竞争者。至于实现 Servlet 规范的 Tomcat 倒是替代不了,因为 。

三种服务器各自适用场景

:适合静态服务和反向代理服务器;它的特点是并发能力强,但是不适合 密集的请求,因为并发场景的 上下文的切换花销挺高的。所以很适合当网关做代理来分发请求的场景。

Httpd:适合Rewrite 场景比较多,对 资源有一定要求的场景;并发能力相对弱些,可以借助 的分发做均衡,水平扩展 Httpd 的服务能力。

Tomcat:Java 应用容器,同样可以借助 实现水平服务的扩展;

选择 的理由:

前面我们也说了, 的并发能力非常好,那么它能这么大的与其他的 Web 服务器差别在哪里呢?

一般的 Web 服务器在并发问题时,通常采用多线程或者多进程来处理请求。这种处理机制在访问量小的时候处理能力确实不错,但是当大了线程或者进程频繁地切换对资源是一种非常大的损耗。

但是 却是单线程的,它采用 事件驱动 + IO 多路复用的处理模型

代理一词在我们生活中很常见,有反向代理肯定也有正向代理。他们之主要区别是,正向代理客户端明确地知道自己最终访问的是谁,反向代理客户端就只了解到代理服务,不清楚具体谁在提供服务。以下列举 2 个例子说明:

反向代理:你去商店买东西,东西是商家到厂里进货过来的,你不需要知道具体的厂家,只要关心你所需要的商品; 就是典型的反向代理服务器,所有人都只知道 的服务地址, 再到后端去请求别到服务。

正向代理:你在网上点了外卖,你清楚地知道是哪个商家提供的食品,但是这个外卖并不是你直接去拿的,是经由外卖小哥帮你送来的,这个过程中你和食品店的老板都知道双方的存在,那么外卖小哥就是你的正向代理而已。

反向代理你可以简单的理解为转发,转发重要的一点是要配置转发规则。 配置的认位置是在 /conf/.conf,配置中关于 Http 的主要配置如下:

 http {                      
    ....
 
    server {
       listen ;#监听端口
       server_name localhost;#域名
        
        # 访问隐藏
       # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }
    
       # 认请求
       location / {
                # 首先尝试将请求作为提供,然后作为目录,然后回退到 。
                # try_files 指令将会按照给定它的参数列出顺序进行尝试,第被匹配的将会被使用。
                # try_files $uri $uri/ =;
      
                try_files $uri $uri/ /index.?path_info=$uri&$args =;
                access_log off;
                expires max;
       }    
 
	  # 所有动态请求都转发给tomcat处理  
        location ~ .(jsp|do)$ {  
            proxy_pass  http://test;  
        } 
        
	    upstream test {                    # 均衡配置
	        server localhost:;  
	        server localhost:;  
    }
}

完配置可以不用重启,运行下面命令重新加载下配置。

 -s reload

总体使用起来比较简单,它的并发模型有别于一般的 Web 服务端,是用单线程的事件驱动 + IO 复用模型,这种模型适合处理 IO 密集型不适合 密集型的场景,Httpd 正好相反。所以 特别适合充当请求转发的代理角色。 的 Work 和每个 Work 能同时处理的请求都是可以在配置调整的,这个可以根据具体的服务器做相应的优化调整。Work 的一般是对应服务器的 核数。


联系我
置顶