HTTP服务器篇-高性能WEB开发

2019-03-01 17:05|来源: BearRui(AK-47)

第一篇:HTTP服务器


   因tomcat处理静态资源的速度比较慢,所以首先想到的就是把所有静态资源(JS,CSS,image,swf)提到单独的服务器,用更加快速的HTTP服务器,这里选择了nginx了,nginx相比apache,更加轻量级,配置更加简单,而且nginx不仅仅是高性能的HTTP服务器,还是高性能的反向代理服务器。


   目前很多大型网站都使用了nginx,新浪、网易、QQ等都使用了nginx,说明nginx的稳定性和性能还是非常不错的。


1. nginx 安装(linux)


   http://nginx.org/en/download.html 下载最新稳定版本


   根据自己需要的功能先下载对应模板,这里下载了下面几个模块:

   openssl-0.9.8l,zlib-1.2.3,pcre-8.00


   编译安装nginx:

./configure

--without-http_rewrite_module

--with-http_ssl_module

--with-openssl=../../lib/openssl-0.9.8l

--with-zlib=../../lib/zlib-1.2.3

--with-pcre=../../lib/pcre-8.00

--prefix=/usr/local/nginx


make


make install  


 2、nginx处理静态资源的配置


    #启动GZIP压缩CSS和JS

    gzip  on;

    # 压缩级别 1-9,默认是1,级别越高压缩率越大,当然压缩时间也就越长

    gzip_comp_level 4;        

    # 压缩类型

    gzip_types text/css application/x-javascript;


    # 定义静态资源访问的服务,对应的域名:res.abc.com

    server {

       listen       80;

       server_name  res.abc.com;


# 开启服务器读取文件的缓存,

open_file_cache max=200 inactive=2h;

open_file_cache_valid 3h;

open_file_cache_errors off;


       charset utf-8;


    # 判断如果是图片或swf,客户端缓存5天

location ~* ^.+.(ico|gif|bmp|jpg|jpeg|png|swf)$ {

  root   /usr/local/resource/;

  access_log off;

  index  index.html index.htm;

  expires 5d;

       }


# 因JS,CSS改动比较频繁,客户端缓存8小时

location ~* ^.+.(js|css)$ {

  root   /usr/local/resource/;

  access_log off;

  index  index.html index.htm;

  expires 8h;

       }


# 其他静态资源

location / {

  root   /usr/local/resource;

  access_log off;

  expires 8h;

}

   }


   3、nginx 反向代理设置


   # 反向代理服务,绑定域名www.abc.com

   server {

listen       80;

server_name  www.abc.com;


charset utf-8;


# BBS使用Discuz!

# 因反向代理为了提高性能,一部分http头部信息不会转发给后台的服务器,

# 使用proxy_pass_header 和 proxy_set_header 把有需要的http头部信息转发给后台服务器

location ^~ /bbs/ {

  root   html;

  access_log off;

  index index.php;

  # 转发host的信息,如果不设置host,在后台使用request.getServerName()取到的域名不是www.abc.com,而是127.0.0.1

  proxy_set_header Host $host;

  # 因Discuz! 为了安全,需要获取客户端User-Agent来判断每次POST数据是否跟第一次请求来自同1个浏览器,

  # 如果不转发User-Agent,Discuz! 提交数据就会报"您的请求来路不正确,无法提交"的错误

  proxy_pass_header User-Agent;

  proxy_pass http://127.0.0.1:8081;

}


# 其他请求转发给tomcat

location / {

  root   html;

  access_log off;

  index index.jsp;

  proxy_pass http://127.0.0.1:8080;

}


error_page   500 502 503 504  /50x.html;

       location = /50x.html {

           root   html;

       }

   }


nginx详细配置参考:http://wiki.nginx.org/

PS:如果安装提示GCC not found,运行下面命令安装就可以(apt-get install build-essential),仅限debian



本文链接:HTTP服务器篇-高性能WEB开发,转自: http://www.blogjava.net/bearrui/

相关问答

更多
  • 这种工具书,建议还是买实体书吧,即翻即用。各大网店也都有卖。 另外这本书,真的很棒。我也是从事Linux运维的。
  • 书我不知道有什么靠谱的。 但是可以在apache Mina或者jboss Netty基础上开发。 你说的这些关键技术和基础设施都准备好了,在获得高性能的同时降低了开发难度。 如果是学习网络&并发编程,结合文档研究下源代码好了。。
  • 在我的印象里面用nginx确实也不少,但是去面试的时候发现上了点规模的都是用nginx。因为nginx处理并发的能力要比apache好很多,以前做过测试在不做负载均衡横和集群的情况下单机apache在6~8K,用nginx可以到2W,至于为什么相信网上有更多的详细资料
  • 用MVC模式开发web的话 只用eclipse建立jsp,servlet,javabean只用eclipse够 ,不需要javaee也能实现
  • 在Tomcat安装的目录下有一个conf目录,其中有一个web.xml文件,这个文件就是用于保存发布工程应用的配置文件。我们只要对这个文件进行配置,就可以发布具体的工程,另外,还有其他的方式发布,例如:通过WAR包发布等。这种配置web.xml文件的方式,有一种好处,就是可以使得我们在项目中修改的东西会自动加载到web容器中来,没有必要每一次都通过重新发布来加载。 web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext) ...
  • 这很多与你的系统上运行的许多线程以及内核给予他们每个时间片有关。 设计很简单,但不能很好地扩展。 你可能应该看看使用Socket.BeginReceive,它将在.net线程池上执行(你可以指定它使用的线程数),然后从异步回调中推入一个队列(它可以运行在任何一个.NET线程)。 这应该会给你更高的性能。 A lot of this has to do with many threads running on your system and the kernel giving each of them a t ...
  • 这里有大量的变量,语言可能不是决定因素。 MINA的作者Trustin Lee后来创建了Netty ,它确实提供了非常高的性能。 Lee自己说 ,MINA由于其所提供的一些功能与核心紧密相关的复杂性而导致“性能相对较差”。 因此,在完全重写所有内容之前,你可以先看看Netty。 如果您使用的是Oracle的JVM,那么您使用的是一个非常优化的运行时系统,它可以识别代码中的热点(因此名称为“HotSpot”),并在运行时积极优化它们。 自从你可以说,事实上,Java代码运行速度比C代码慢的时间已经很长了。 编 ...
  • 我认为在性能方面找到“最好的”cotnainer是非常艰巨的任务,它基于你的特定用例,意思是 - 你将如何使用它? 由于它是RESTful API,我想你会有兴趣通过一些简单的服务为大量客户提供服务。 所以,如果我是你,我会寻找对大量请求稳定的服务器。 请查看这篇有趣的文章,为您提供有关性能主题的更多见解。 就个人而言,我会选择嵌入式tomcat或码头 。 I think finding "the best" cotnainer in terms of performance is very hard ta ...
  • 好吧,如果你真的需要高性能,不要选择C#,而是使用C / C ++,这很明显。 在任何情况下,进行服务器编程的最快方法(据我所知)是使用IOCP(I / O完成端口)。 嗯,这就是我在制作MMORPG服务器模拟器时所使用的,它的执行速度比官方的基于C ++ select的服务器快。 以下是C#中对IOCP的完整介绍http://www.codeproject.com/KB/IP/socketasynceventargs.aspx 祝你好运 ! Okay, if you REALLY need high pe ...
  • 经过一番调查,我发现: 编写自定义tcp服务器是我们唯一的选择。 可以在WCF中进行,但非常困难,因为我们需要使用自定义绑定定制消息编码器,这在我们的案例中非常困难。 Signal / R不适合我们,因为它是针对其他类型的任务而设计的。 不适用于通用TCP服务器。 没有找到任何关于它的信息。 ZeroMQ非常好,它支持tcp请求回复样式和多播,但它迫使我们在客户端使用zmq,因为它使用自定义框架。 不幸的是,我们的客户端在硬件中实现,根本不可能添加zmq。 After some investigation ...