Nginx与Tomcat安装、配置与优化
Nginx与Tomcat安装、配置与优化
Nginx的安装与使用
Nginx是一款优秀的反向代理服务器
安装:
- rpm(或者是pkg安装),是预编译好的程序包安装
- yum(或者apt-get)安装,自动联网下载安装包,自动管理依赖关系
- 编译安装
- 检查和安装依赖项
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
- configure
make && make install
- 检查和安装依赖项
启动、停止、重启:
安装好后,测试nginx服务:
1.service nginx status
然后应该返回nginx is stopped
启动:
1.service nginx start
停止:
1.service nginx stop
重启:
1.service nginx restart
启动成功后会在网页中显示
设置开机启动 vi /etc/rc.d/rc.local
编辑这个文件
加上最后一行/opt/nginx/sbin/nginx
Nginx的配置
nginx的配置文件nginx.conf
1.[root@iZ28gvqe4biZ ~]# locate nginx
2./etc/nginx
3./etc/nginx/conf.d
4./etc/nginx/default.d
5./usr/share/nginx
6./usr/share/augeas/lenses/dist/nginx.aug
7./usr/share/nginx/html
8.[root@iZ28gvqe4biZ ~]# cd /etc/nginx/
9.[root@iZ28gvqe4biZ nginx]# ls
10.conf.d fastcgi_params koi-win nginx.conf uwsgi_params
11.default.d koi-utf mime.types scgi_params win-utf
12.[root@iZ28gvqe4biZ nginx]#
13.vi nginx.conf
nginx是一个基于模块化设计的一个应用程序
1.# 顶层配置信息管理服务器级别行为
2.worker_processes 1;
3.
4.# event指令与事件模型有关,配置处理连接有关信息
5.events {
6. worker_connections 1024;
7.}
8.
9.# http指令处理http请求
10.http {
11. # mime type映射
12. include mime.types;
13. default_type application/octet-stream;
14.
15. sendfile on;
16. #tcp_nopush on;
17.
18. #keepalive_timeout 0;
19. keepalive_timeout 65;
20.
21. #gzip on;
22.
23. # server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
24. server {
25. # 监听端口
26. listen 80;
27. # 识别的域名
28. server_name localhost;
29.
30. # 一个关键设置,与url参数乱码问题有关
31. charset utf-8;
32.
33. #access_log logs/host.access.log main;
34.
35. #location表达式:
36. #syntax: location [=|~|~*|^~|@] /uri/ { … }
37. #分为两种匹配模式,普通字符串匹配,正则匹配
38. #无开头引导字符或以=开头表示普通字符串匹配
39. #以~或~* 开头表示正则匹配,~*表示不区分大小写
40. #多个location时匹配规则
41. #总体是先普通后正则原则,只识别URI部分,例如请求为/test/1/abc.do?arg=xxx
42. #1. 先查找是否有=开头的精确匹配,即location = /test/1/abc.do {...}
43. #2. 再查找普通匹配,以 最大前缀 为规则,如有以下两个location
44. # location /test/ {...}
45. # location /test/1/ {...}
46. # 则匹配后一项
47. #3. 匹配到一个普通格式后,搜索并未结束,而是暂存当前结果,并继续再搜索正则模式
48. #4. 在所有正则模式location中找到第一个匹配项后,以此匹配项为最终结果
49. # 所以正则匹配项匹配规则受定义前后顺序影响,但普通匹配不会
50. #5. 如果未找到正则匹配项,则以3中缓存的结果为最终结果
51. #6. 如果一个匹配都没有,返回404
52.
53. #location =/ {...} 与 location / {...} 的差别
54. #前一个是精确匹配,只响应/请求,所有/xxx类请求不会以前缀匹配形式匹配到它
55. #而后一个正相反,所有请求必然都是以/开头,所以没有其它匹配结果时一定会执行到它
56.
57. #location ^~ / {...} ^~意思是非正则,表示匹配到此模式后不再继续正则搜索
58. #所有如果这样配置,相当于关闭了正则匹配功能
59. #因为一个请求在普通匹配规则下没得到其它普通匹配结果时,最终匹配到这里
60. #而这个^~指令又相当于不允许正则,相当于匹配到此为止
61. location / {
62. root html;
63. index index.html index.htm;
64. # deny all; 拒绝请求,返回403
65. # allow all; 允许请求
66. }
67.
68. location /test/ {
69. deny all;
70. }
71.
72. location ~ /test/.+\.jsp$ {
73. proxy_pass http://192.168.1.62:8080;
74. }
75.
76. location ~ \.jsp$ {
77. proxy_pass http://192.168.1.61:8080;
78. }
79.
80. # 定义各类错误页
81. error_page 404 /404.html;
82.
83. # redirect server error pages to the static page /50x.html
84. #
85. error_page 500 502 503 504 /50x.html;
86. location = /50x.html {
87. root html;
88. }
89.
90. # @类似于变量定义
91. # error_page 403 http://www.jikexueyuan.com这种定义不允许,所以利用@实现
92. error_page 403 @page403;
93. location @page403 {
94. proxy_pass http://http://www.jikexueyuan.com;
95. }
96. }
97.
98.
99. # another virtual host using mix of IP-, name-, and port-based configuration
100.
101. server {
102. listen 80;
103. #listen 9090
104. server_name www.test.com test.com other.cc;
105.
106. location / {
107. # root d:\\test; 注意,win下d:\test因转义符问题不允许
108. root d:/test
109. index index.html index.htm;
110. }
111. }
112.}
113.
Nginx的优化
1.
2.# nginx不同于apache服务器,当进行了大量优化设置后会魔术般的明显性能提升效果
3.# nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多
4.
5.#user nobody;
6.
7.#阻塞和非阻塞网络模型:
8.#同步阻塞模型,一请求一进(线)程,当进(线)程增加到一定程度后
9.#更多CPU时间浪费到切换一,性能急剧下降,所以负载率不高
10.#Nginx基于事件的非阻塞多路复用(epoll或kquene)模型
11.#一个进程在短时间内可以响应大量的请求
12.#建议值 <= cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响
13.worker_processes 1;
14.
15.#将work process绑定到特定cpu上,避免进程在cpu间切换的开销
16.worker_cpu_affinity 0001
17.#8内核4进程时的设置方法 worker_cpu_affinity 00000001 00000010 00000100 10000000
18.
19.# 每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)
20.# 文件描述符用完了,新的连接会被拒绝,产生502类错误
21.# linux最大可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits.conf配置
22.# 理论值 系统最大数量 / 进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些
23.worker_rlimit_nofile 655350
24.
25.#error_log logs/error.log;
26.#error_log logs/error.log notice;
27.#error_log logs/error.log info;
28.#pid logs/nginx.pid;
29.
30.
31.events {
32. # 并发响应能力的关键配置值
33. # 每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;
34. # 要注意maxConnections不等同于可响应的用户数量,
35. # 因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数
36. # 所以,做静态服务器时,一般 maxClient = work_connectins * worker_processes / 2
37. # 做反向代理服务器时 maxClient = work_connectins * worker_processes / 4
38.
39. # 这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量(约64K)有关
40. worker_connections 500;
41.
42. # 指明使用epoll 或 kquene (*BSD)
43. use epoll
44.
45. # 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数
46.}
47.
48.
49.http {
50. include mime.types;
51. default_type application/octet-stream;
52.
53. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
54. # '$status $body_bytes_sent "$http_referer" '
55. # '"$http_user_agent" "$http_x_forwarded_for"';
56.
57. # 关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用
58. access_log off
59. # 只记录更为严重的错误日志,可减少IO压力
60. error_log logs/error.log crit;
61. #access_log logs/access.log main;
62.
63. # 启用内核复制模式,应该保持开启达到最快IO效率
64. sendfile on;
65.
66. # 简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据
67. # 这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性
68. # 比较适合于文件下载这类的大数据包通信场景
69. #tcp_nopush on; 在
70. #tcp_nodelay on|off on禁用Nagle算法
71.
72. #keepalive_timeout 0;
73.
74. # HTTP1.1支持持久连接alive
75. # 降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值
76. keepalive_timeout 30s;
77.
78. # 启动内容压缩,有效降低网络流量
79. gzip on;
80. # 过短的内容压缩效果不佳,压缩过程还会浪费系统资源
81. gzip_min_length 1000;
82. # 可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高
83. gzip_comp_level 4;
84. # 压缩的内容类别
85. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
86.
87. # 静态文件缓存
88. # 最大缓存数量,文件未使用存活期
89. open_file_cache max=655350 inactive=20s;
90. # 验证缓存有效期时间间隔
91. open_file_cache_valid 30s;
92. # 有效期内文件最少使用次数
93. open_file_cache_min_uses 2;
94.
95. server {
96. listen 80;
97. server_name localhost;
98.
99. #charset koi8-r;
100.
101. #access_log logs/host.access.log main;
102.
103. location / {
104. root html;
105. index index.html index.htm;
106. }
107.
108. #error_page 404 /404.html;
109.
110. # redirect server error pages to the static page /50x.html
111. #
112. error_page 500 502 503 504 /50x.html;
113. location = /50x.html {
114. root html;
115. }
116.
117. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
118. #
119. #location ~ \.php$ {
120. # proxy_pass http://127.0.0.1;
121. #}
122.
123. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
124. #
125. #location ~ \.php$ {
126. # root html;
127. # fastcgi_pass 127.0.0.1:9000;
128. # fastcgi_index index.php;
129. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
130. # include fastcgi_params;
131. #}
132.
133. # deny access to .htaccess files, if Apache's document root
134. # concurs with nginx's one
135. #
136. #location ~ /\.ht {
137. # deny all;
138. #}
139. }
140.
141.
142. # another virtual host using mix of IP-, name-, and port-based configuration
143. #
144. #server {
145. # listen 8000;
146. # listen somename:8080;
147. # server_name somename alias another.alias;
148.
149. # location / {
150. # root html;
151. # index index.html index.htm;
152. # }
153. #}
154.
155.
156. # HTTPS server
157. #
158. #server {
159. # listen 443 ssl;
160. # server_name localhost;
161.
162. # ssl_certificate cert.pem;
163. # ssl_certificate_key cert.key;
164.
165. # ssl_session_cache shared:SSL:1m;
166. # ssl_session_timeout 5m;
167.
168. # ssl_ciphers HIGH:!aNULL:!MD5;
169. # ssl_prefer_server_ciphers on;
170.
171. # location / {
172. # root html;
173. # index index.html index.htm;
174. # }
175. #}
176.
177.}
178.
Tomcat的安装使用
Tomcat的安装需要JDK的支持,所以在服务器上要先安装JDK(详情看前面文章)并配置环境变量
下载安装tomcat:http://tomcat.apache.org/
解压文件,解压完成直接就可以使用
进入目录下,执行bin/startup.sh
执行成功后会显示
1.Tomcat started
默认情况下,在linux下是后台运行的,因此控制台是看不到的,如果要看到log文件输出,则在目录下有一个logs文件夹,文件夹内有个catalina.out
文件,查看它也就知道了整个运行结果
1.cat catalina.out
如果想要实时监控,则可以
1.tail -f catalina.out
停止Tomcat的运行
1.bin/shutdown.sh
设置开机自动运行vi /etc/rc.d/rc.local
在最后加上
1.export JAVA_HOME=/opt/jdk1.8.0_51
2.$JAVA_HOME/bin/startup.sh
由于rc.local文件与profile文件的启动顺序不一样,而且使用的脚本也不一样,所以有可能JAVA是不能一开始读到的,也就是说Tomcat没有JDK启动失败,所以要重新设置JAVA的环境变量
Tomcat的配置与优化
- 内存使用配置
catalina.sh
中间的位置,有
1.# Uncomment the following line to make the umask available when using the
2.# org.apache.catalina.security.SecurityListener
3.#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
4.
5.# windows下设置方法
6.#set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:PermSize=512M -XX:MaxPermSize=512m
7.# 通过内存设置充分利用服务器内存
8.# -server模式启动应用慢,但可以极大程度提高运行性能
9.# java8开始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不会再有java.lang.OutOfMemoryError: PermGen space,可以不设置
10.# headless=true适用于linux系统,与图形操作有关,如生成验证码,含义是当前使用的是无显示器的服务器,应用中如果获取系统显示有关参数会抛异常
11.# 可通过jmap -heap proccess_id查看设置是否成功
12.JAVA_OPTS=$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true
13.# ----- Execute The Requested Command -----------------------------------------
14.
- 最大连接数配置
server.xml
在中间部分
1. <!-- protocol 启用 nio模式,(tomcat8默认使用的是nio)(apr模式利用系统级异步io) -->
2. <!-- minProcessors最小空闲连接线程数-->
3. <!-- maxProcessors最大连接线程数-->
4. <!-- acceptCount允许的最大连接数,应大于等于maxProcessors-->
5. <!-- enableLookups 如果为true,requst.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名-->
6. <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
7. connectionTimeout="20000"
8. redirectPort="8443
9.
10. maxThreads=“500”
11. minSpareThreads=“100”
12. maxSpareThreads=“200”
13. acceptCount="200"
14. enableLookups="false"
15. />