一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Server

CentOS6.5搭建LNMP

1:查看环境: 1 2 [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 1 [root@10-4-14-168 html]# chkconfig iptables off 3:配置CentOS 6.0 第三方yum源(CentOS默认的标准源里没有nginx软件包) 1 #wget http://www.atomicorp.com/installers/atomic 1 #sh ./atomic 1 #yum check-update 4:安装开发包和库文件  1 2 3 4 #yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel 5:卸载已安装的apache、mysql、php 1 2 3 # yum remove httpd # yum remove mysql # yum remove php 6:安装nginx 1 […]

龙生   13 Jan 2018
View Details

在Nginx上配置多个站点

有时候你想在一台服务器上为不同的域名运行不同的站点。比如www.siteA.com作为博客,www.siteB.com作为论坛。你可以把两个域名的IP都解析到你的服务器上,但是没法在Nginx的根目录里同时运行两个不同的网站。这时候,你就需要使用虚拟目录了。假设你把博客放在”/home/user/www/blog”下,论坛放在”/home/user/www/forum”下。下面我们就开始配置了: 在Nginx配置目录下,创建一个”vhost”目录。本例假设Nginx是默认安装,配置目录在”/etc/nginx” $ sudo mkdir /etc/nginx/vhost 创建siteA的配置文件 $ sudo vi /etc/nginx/vhost/vhost_siteA.conf 输入以下配置信息 server { listen 80; # 监听端口 server_name www.siteA.com siteA.com; # 站点域名 root /home/user/www/blog; # 站点根目录 index index.html index.htm index.php; # 默认导航页 location / { # WordPress固定链接URL重写 if (!-e $request_filename) { rewrite (.*) /index.php; } } # PHP配置 location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } 同siteA一样创建siteB的配置文件,两者仅有的不同是”server_name”和”root”目录 $ sudo vi /etc/nginx/vhost/vhost_siteB.conf server { … server_name www.siteB.com siteB.com; # 站点域名 root /home/user/www/forum; # 站点根目录 … } 打开nginx.conf文件 sudo vi /etc/nginx/nginx.conf 将虚拟目录的配置文件加入到”http {}”部分的末尾 http { […]

龙生   21 Dec 2017
View Details

nginx ssl配置

1. 全站ssl 全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证。

  如果想把http的请求强制转到https的话:

  ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。 ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。 ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法) 来看所支持算法。 ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。 https优化参数 ssl_session_cache shared:SSL:10m; : 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 详细参考serverfault上的问答ssl_session_cache。 ssl_session_timeout : 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。 设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了。 提示:在生成证书请求csr文件时,如果输入了密码,nginx每次启动时都会提示输入这个密码,可以使用私钥来生成解密后的key来代替,效果是一样的,达到免密码重启的效果:   HTTPS服务器优化 SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:第一种是保持客户端长连接,在一个SSL连接发送多个请求,第二种是在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手的操作。会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用ssl_session_cache指令进行配置。1M缓存可以存放大约4000个会话。默认的缓存超时是5分钟,可以使用ssl_session_timeout加大它。下面是一个针对4核系统的配置优化的例子,使用10M的共享会话缓存:

  from:http://blog.csdn.net/mr_raptor/article/details/51854746

龙生   29 Sep 2017
View Details

nginx中的超时设置

nginx使用proxy模块时,默认的读取超时时间是60s。 1. send_timeout syntax: send_timeout the time default: send_timeout 60 context: http, server, location Directive assigns response timeout to client. Timeout is established not on entire transfer of answer, but only between two operations of reading, if after this time client will take nothing, then nginx is shutting down the connection.   2. 负载均衡配置时的2个参数:fail_timeout和max_fails 这2个参数一起配合,来控制nginx怎样认为upstream中的某个server是失效的当在fail_timeout的时间内,某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。 个人认为,nginx不应该把这2个时间用同一个参数fail_timeout来控制,要是能再增加一个fail_time,来控制接下来的多长时间内,不再使用down掉的server就更好了~ 如果不设置这2个参数,fail_timeout默认为10s,max_fails默认为1。就是说,只要某个server失效一次,则在接下来的10s内,就不会分发请求到该server上 3. proxy模块的 proxy_connect_timeout syntax: proxy_connect_timeout timeout_in_seconds context: http, server, location This directive assigns a timeout for the connection to the proxyserver. This is not the time until the server returns the pages, this is the […]

龙生   21 Sep 2017
View Details

ASP.NET Core 缓存技术 及 Nginx 缓存配置

前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx的反向代理来降低我们后端应用程序的压力。那除了以上两点之外,其实我们还可以利用代理服务器的缓存功能来进一步的降低后端应用程序的压力,提升系统的吞吐量(tps)。这一篇就来看一下具体应该如何去做吧。 目录 WEB 缓存 ASP.NET Core 缓存 内存缓存 分布式缓存 Response 缓存 Nginx 缓存 总结 WEB 缓存 之所以加这个目录是因为有一部分初学者对缓存的认知不够,特别是WEB中的缓存。 缓存它是一种空间换取时间的一种技术。 Web缓存(或HTTP缓存)是用于Web文档,如HTML页面和图像,减少带宽的使用,服务器的负载的一种信息技术。一个Web缓存系统存储通过Cache来传递的文件的副本;如果满足某些条件,则可以从缓存中得到后续的请求。 WEb缓存有几种方式: 1、服务端缓存 利用 Memcached,Redis,In-Memery 等缓存技术实现对数据的缓存。 2、代理服务器缓存 利用类似nginx的反向代理服务器,对请求的url对应的输出的进行缓存。这个缓存和应用程序实现的动态页面缓存类似,只不过用反向代理充当了应用程序的缓存实现。 3、客户端缓存 浏览器缓存,其实主要就是HTTP协议定义的缓存机制(如: Last-Modified,If-Modified-Since,Expires; Cache-control等)。 ASP.NET Core 缓存 内存缓存 最简单的一种缓存,ASP.NET Core 提供了 IMemoryCache 接口来供我们使用。它存储在本地的 WEB 服务器内容中,注意是单机的 WEB 服务器,如果你需要部署的是一个服务器集群的话,那么你应该用分布式缓存,而不是选择这个。 就不详细介绍了,想了解的可以直接看官方文档。 分布式缓存 随着云应用和服务器集群以及 docker 等技术的成熟,越来越多的应用程序开始考虑集群部署,因为它具有更好的性能和可伸缩可扩展性。那么这个时候就需要用到分布式缓存了。 在 ASP.NET Core应用中,已经对分布式缓存做了抽象,提供了 IDistributedCache 接口,该接口提供了添加,检索,删除等的同步和异步的方法。并且还默认提供了 Redis 和 SQLServer 的分布式缓存实现,我们也可以实现 IDistributedCache 接口来扩展自己的缓存系统。 需要说明的是Get,GetAsync和Set,SetAsync。 这两个接口方法默认是使用的byte[],之所以没有提供直接存储对象的方法是因为微软想把这个默认序列化的选择交给用户,因为每一个团队的偏好是不一样的,有些团队喜欢使用 XML,有些喜欢使用 JSON,有些喜欢使用 Protobuf 等,所以在 项目中,你可以根据自己的偏好来扩展想要的方法。 具体使用方法还是直接看官方文档好了。 关于使用也可以查看我的另外一篇博客: ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存。 Response 缓存 在 ASP.NET Core中,有一种缓存叫做Response缓存,这个缓存主要是用来做代理服务器的缓存。它主要原理是在输出的HTTP Response的header里面添加指定的缓存标记。这些缓存标记用来让客户端或者代理服务器来识别需要缓存的内容。然后当客户端有请求到代理服务器的时候,代理服务器可以识别出一部分请求,然后直接把结果返回给浏览器,从而提高后端应用程序的性能和吞吐。 从这个图中看出来,在第一次的时候,一个客户端请求经过代理服务器请求的我们后端的WEB服务器上,然后WEB服务器在返回结果的META上添加了cache-control标签,它的值为public。 下面是cache-control标签一些值的说明: public 指示响应可被任何缓存区缓存。 […]

龙生   16 Sep 2017
View Details

Nginx 502 Bad Gateway 错误的原因及解决方法

Nginx 502 Bad Gateway 的错误已经遇到好几次了,这里做一下记录,备忘哈哈。 会有好多种情况出现502错误,下面我们分情况来说一下。 一、fastcgi缓冲区设置过小 出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误。 2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream 查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。 网上查找了一下解决方法,在国外网站看到了一个增加缓冲区的方法,彻底解决了Nginx 502 Bad Gateway的问题。方法如下: 1 2 3 4 5 6 http {     …     fastcgi_buffers 8 16k;     fastcgi_buffer_size 32k;     … } 请根据服务器已经网站的情况自行增大上述两个配置项。 二、代理缓冲区设置过小 如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 server {         listen       80;         server_name  *.lxy.me;         location / { ###############添加这3行                proxy_buffer_size 64k;               proxy_buffers   32 32k;               proxy_busy_buffers_size 128k; ###############添加这3行             proxy_set_header […]

龙生   10 Sep 2017
View Details

AMQP消息服务器 RabbitMQ

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。 AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型: from:https://www.oschina.net/p/rabbitmq

龙生   29 Aug 2017
View Details

Caddy,一个用Go实现的Web Server

这是一个Web Server的时代,apache2与nginx共舞,在追求极致性能的路上,没有最高,只有更高。但这又是一个追求个性化的时代,有些Web Server并没有去挤“Performance提升”这一独木桥,而是有着自己的定位,Caddy就是这样一个开源Web Server。 Caddy的作者Matt Holt在caddy官网以及FAQ中对caddy的目标阐释如下: 其他Web Server为Web而设计,Caddy为human设计。功能定位上,与经常充当最前端反向代理的nginx不同,caddy致力于成为一个易用的静态 文件Web Server。可以看出Caddy主打易用性,使用配置简单。并且得益于Go的跨平台特性,caddy很容易的支持了三大主流平台:Windows、 Linux、Mac。在Caddy开发者文档中,我们可以看到caddy还可以在Android(linux arm)上运行。caddy目前版本为0.7.1,还不稳定,且后续版本可能变化较大,甚至与前期版本不兼容,因此作者目前不推荐caddy在生产环境被 重度使用。 关注caddy,是因为caddy填补了go在通用web server这块的空白(也许有其他,但我还不知道),同时Web server in go也“响应”了近期Golang去C化的趋势(Go 1.5中C is gone!),即便caddy作者提到caddy的目标并非如nginx那样。但未来谁知道呢?一旦Go性能足够高时,一旦caddy足够稳定时,自然而 然的就会有人将其用在某些应用的生产环境中替代nginx或apache2了。一套全Go的系统,在部署、运维方面也是有优势的。 一、安装和运行caddy 和诸多go应用一样,我们可以直接从caddy的github.com releases页中找到最新发布版(目前是0.7.1)的二进制包。这里使用的是caddy_darwin_amd64.zip。 下载解压后,进入目录,直接执行./caddy即可将caddy运行起来。 $caddy 0.0.0.0:2015 在浏览器里访问localhost:2015,页面上没有预期显示的类似"caddy works!”之类的默认Welcome页面,而是“404 Not Found"。虽然这说明caddy已经work了,但没有一个default welcome page毕竟对于caddy beginer来说并不友好。这里已经向作者提了一个sugguestion issue。 二、caddy原理 Go的net/http标准库已经提供了http server的实现,大多数场合这个http server都能满足你的需要,无论是功能还是性能。Caddy实质上也是一个Go web app,它也import net/http,嵌入*http.Server,并通过handler的ServeHTTP方法为每个请求提供服务。caddy使用 http.FileServer作为处理 静态文件的基础。caddy的诱人之处在于其middleware,将诸多middleware串成一个middleware chain以提供了灵活的web服务。另外caddy中的middleware还可以独立于caddy之外使用。 caddy从当前目录的Caddyfile(默认)文件中读取配置,当然你也可以通过-conf指定配置文件路径。Caddyfile的配置格式 的确非常easy,这也符合caddy的目标。 Caddyfile总是以站点的Addr开始的。 单一站点的Caddyfile样例如下: //Caddyfile localhost:2015 gzip log ./2015.log Caddy也支持配置多个站点,类似virtualhost的 配置(80端口多路复用): //Caddyfile foo.com:80 { log ./foo.log gzip } bar.com:80 { log ./bar.log gzip } 为了实现风格上的统一,单一站点也最好配置为如下这种格式(代码内部称之为    Server Block): localhost:2015 { gzip log ./2015.log } 这样Caddyfile的配置文件模板样式类似于下面这样: host1:port { middleware1 middleware2 { … … } […]

龙生   14 Aug 2017
View Details

Win7系统IIS7+Tomcat7集成

IIS是Internet Information Services(互联网信息服务)的缩写,是由微软公司提供的基于运行Microsoft Windows的互P联网基本服务,是微软在Windows中内置的Web服务器软件。通过IIS和Tomcat的集成可以让Tomcat处理JSP,IIS处理ASP和Html静态页面。 一、安装tomcat 我所用的Tomcat是最新版的7.0.27直接安装版,安装的位置是D:\Program Files\Tomcat7,记住这个路径会多次用到,注意在Tomcat之前一定要安装JDK,这里我用的是jdk1.7.    二、配置IIS 进入Win7的控制面板,打开程序功能,点击选择打开或关闭Windows功能   在Windows功能的选项菜单,把internet信息服务的所有的组件全部勾起来。 注意:安装完成后IIS的地址是http://localhost和tomcat的地址http://localhost:8080看看出没出现默认画面。   三、集成Tomcat 1、连接器jk 在tomcat的bin目录下新建目录jk\,把下载的isapi_redirect.dll(连接器,可从网上下载http://mirror.bit.edu.cn/apache//tomcat/tomcat-connectors/jk/binaries/windows/,我使用的是目前的最新版1.2.35),拷贝到这个目录下。 2、在tomcat的conf目录下创建两个文件workers.properties,uriworkermap.properties Workers.properties文件的内容:

  uriworkermap.properties文件的内容(注意:这个文件说明了符合哪些条件的uri才能被转发到tomcat中,可能的设置有)

  3、导入注册表文件tomcat.reg 任意的在哪里建一个文本文档,命名为tomcat.reg,内容如下:

双击运行这个文件导入到注册表中。   4、建立网站的虚拟目录 打开你的Internet信息服务管理器,进入管理页面,展开左边的连接栏,选择你的一个网站,这里我的网站名是tomcat,主目录是e:\tomcat,鼠标单击右键添加虚拟目录,打开虚拟目录对话框。 别名处写上jakarta,其中jakarta是一个规定名字,必须这么创建,这个虚拟目录要指向isapi_redirect.dll的所在目录,并且设置为可执行IsApi。   5、添加筛选器 选中自己的网站,选择ISAPI筛选器,如图所示: 在出现的框中,单击鼠标右键,单击添加选项,出现添加ISAPI筛选器对话框,在名称处中输入jakarta,并选择连接器的路径,如下图所示:   6、添加脚本映射 单击“程序处理映射”选项,在打开的对话框中鼠标右键单击“添加脚本映射”选项,在打开的对话框中,按下图的配置进行输入: 在弹出的对话框中单击是按钮。 之后选择jakarta这项,单击鼠标右键选择编辑功能权限选项,如下图所示全部选中。至此所有的配置完毕。 在浏览器中输入“http://localhost”,在IE中有时如果不加HTTP的化可能会出现错误,这样(不加8080)访问IIS的服务器,可以看到网页显示的是tomcat的默认主页,说明IIS已经指向了tomcat,为了能更好的服务最好将两个服务器指向同一个的Web的目录,这样的IIS就支持jsp了,完成之后重新启动。 在tomcat的配置文件server.xml文件中添加以下这句话可以更改tomcat的默认目录: <Context path=”” docBase=”e:\tomcat”(此处为你的网站根目录,通过这句话的映射,可以将原先的默认更改为新的目录) debug=”0”/> 以上的操作是我根据网上的,书上的做的总结。在百度文库中我也发了一份,我也是初级的研究,如有不足之处希望大家理解。希望大家给我评论一下。   from:http://blog.csdn.net/longyuhome/article/details/7577502

龙生   02 Aug 2017
View Details