HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计应该是这样的:)
概述与设计
主机使用阿里云主机,配置不高,但前期应该够用,以后有需要的话再升级.
主要的业务逻辑是用java实现,并用tomcat承载,但大家知道tomcat并不适合作为大量的静态资源的访问的服务器,这个工作交给nginx正好,所以用nginx作为反向代理,把业务逻辑交给tomcat,而其它一些资源访问的工作nginx自己直接处理并返回.设计如下:
http(s)://happyaa.com/resource/... => 静态资源文件,nginx直接自己处理 https://happyaa.com/hpaasvc/... => 主业务逻辑交给tomcat(使用安全连接) http://happyaa.com/hpaasvc/... => 重定向到https,对于hpaasvc,必须使用安全连接 http(s)://happyaa.com/... => 其它,交给tomcat处理
大家可能已经注意到了,对于业务逻辑这一块,我使用了安全连接,这个安全连接也是由nginx提供的,而tomcat不会直接暴露给客户端访问,一来nginx的并发能力比tomcat强很多,这样有利于性能的提高,二来可以通过配置nginx来挡掉很多非法访问,让tomcat更加专注于业务.后面还可以考虑用nginx提供缓存等,总之前端服务器就是nginx无疑了.
nginx安装
我的操作系统是CentOS,在安装nginx之前先yum update一下:
#yum update
更新一些库和必要的支持,完了之后去下载一个nginx的最新版,如今我责编的版本是1.7.7:
#wget http://nginx.org/download/nginx-1.7.7.tar.gz
解压缩
#tar -zvxf nginx-1.7.7.tar.gz
#cd nginx-1.7.7
nginx有很多很多编译配置项,但由于我这是第一篇笔记,所以我基本上都使用了默认的配置:
#./configure --with-http_ssl_module --with-http_gzip_static_module
我只加了两个选项,--with-http_ssl_module表示使用ssl模块,--with-http_gzip_static_module表示使用gzip模块,其它更详细的配置就要参考nginx的文档了:http://nginx.org/en/docs/configure.html
如果没configure成功(会显示XXX not found),那是因为有些依赖没有被正确安装.那么先安装一下这些依赖条件,通常是pcre,zlib这些,这么一下就基本上可以了:
#yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
#make
#make install
可执行文件就会被安装在: /usr/sbin/nginx (默认配置)
nginx基本使用
启动nginx:
#cd /usr/local/nginx/sbin/
#./nginx
如果运行的时候不带-c参数,那就采用默认的配置文件,即/etc/nginx/nginx.conf
查看运行进程状态:
# ps aux | grep nginx
打开浏览器,访问http://localhost/看看nginx的默认页面:
停止nginx:
#./nginx -s stop
重启nginx(配置文件变动后需要重启才能生效):
#./nginx -s reload
检查配置文件是否正确:
#./nginx -t
查看nginx的pid:
cat /usr/local/nginx/logs/nginx.pid
查看nginx版本
$ ./nginx -v
回头看编译配置
# ./nginx -V
nginx的配置
nginx的功能基本上都是通过配置实现的,如今我们只需要符合我们前面提到的那些功能的配置即可.下面是我的ngxin配置文件,大部分都是默认的,只需要注意粗体字部分.我都在上面加了一些注释.(限于我这个初级用户的水平,有些可能不太准确,要详细了解的话还是得到官网去查文档:http://nginx.org/en/docs/,或者自行google)
#工作进程所用的用户,我这里用了root用户,其实不太好,更好的做法是创建一个专门的用户 user root; #工作进程数,通常主机的CPU核心数是多少,这里就写多少 worker_processes 2; events { #最大网络连接数 worker_connections 1024; } http { include mime.types; #默认的响应的MIME类型 default_type application/octet-stream; #允许使用系统的sendfile()函数,据说这样能提高性能,我是不太了解 sendfile on; #连接保持的时间 keepalive_timeout 65; #配置普通http连接 server { listen 80; server_name happyaa.com; #将对 http://happyaa.com/... 的访问转向后端的 http://localhost:8080/... location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; } #对http://happyaa.com/resource/... 的访问将会返回主机上的 /resource/... 文件资源 location /resource { alias /resource; expires 1h; } #对http://happyaa.com/hpaasvc/...的访问将重定向至https://happyaa.com/hpaasvc/... location /hpaasvc { rewrite ^(.*)$ https://$host$1 permanent; } } #配置https安全连接 server { listen 443 ssl; server_name happyaa.com; ssl on; #证书文件位置: /usr/local/nginx/conf/cert/happyaa.com.crt ssl_certificate cert/happyaa.com.crt; #密钥文件位置: /usr/local/nginx/conf/cert/happyaa.com.key ssl_certificate_key cert/happyaa.com.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; #将对 https://happyaa.com/... 的访问转向后端的 http://localhost:8080/... location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; } #对https://happyaa.com/resource/... 的访问将会返回主机上的 /resource/... 文件资源 location /resource { alias /resource; expires 1h; } } }
证书可以去找一个权威证书颁发机构获取,也可以自己弄一张自签的,但自签的证书浏览器不认,当然也可以到wosign.org去获取一个免费的——我就这么干的.证书相关的概念,可以通过我这篇文章来了解:http://www.cnblogs.com/guogangj/p/4118605.html
tomcat的安装与配置
关于tomcat的安装,我之前有写过相关的东西,可以通过这个看到:http://www.cnblogs.com/guogangj/p/3725371.html#tomcatsetup
现在的tomcat的安装和配置跟之前没什么两样,只有这两点差别:
1, 不需要弄https了,https交给了nginx,tomcat就不需要弄了;
2, 要禁止外部直接访问tomcat,我是通过valve(阀)来控制的,配置如下.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- ... --> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" deny=""/> </Host>
我是将这个阀加在了Host节点中.这样所有的外部的直接对tomcat的访问都会直接获得403错误.
部署程序
没什么太多好说的,差不多就这些步骤:
1, 创建数据库;
2, 调整程序自身的配置文件;
3, 上传war包;
4, blah blah blah...
打开happyaa.com:
抓包看看,http头中的server是什么?应该是nginx.而且现在应该是http和https都可以用的,一般情况下可以用http,但如果网络连的是公共区域的WIFI,不太放心的话,还是要用https的.我发觉虽然没有做什么额外的优化,但访问网页的速度貌似快了很多,这并不是心理作用,nginx确确实实能提高速度,至于为什么,我这里摘录知乎上的一段话:
对于后端是动态服务来说,比如Java和PHP。这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高。Nginx有个好处是它会把Request在读取完整之前buffer住,这样交给后端的就是一个完整的HTTP请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。同样,Nginx也可以把response给buffer住,同样也是减轻后端的压力。
原文地址: http://www.zhihu.com/question/19761434
待续
nginx除了是一个非常优秀的反向代理服务器之外,还有其它很多功能,比如缓存,这是大幅度提高网站性能的一个关键性的东西,配置且不算很复杂,不过我现在暂时不弄了,就我们现在这点负荷,先不考虑了.高德纳不是说过么?过早的优化是万恶之源.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。