Nginx Tomcat Mysql

发布时间:2021-08-02 23:35 来源:网络整理 阅读:162 作者:lxcome 栏目: 云计算 欢迎投稿:712375056

修改tomcat安装目录bin/catalina.sh,添加export JAVA_OPTS='-Xms1024m -Xmx1024m',前面是初始化内存大小,后面是可以使用最大内存
location ~ \.(html|jsp|gif|jpg|jpeg|png|bmp|js|xml|java|jar|txt|swf|xls|txt)$ {
因为公司上一个项目使用Rails框架的缘故,这次继续沿用上一个框架的前端Nginx,作为一款轻量级的HTTP服务器,它在Linux平台上的表现毋庸置疑,本项目只用它来作为静态文件的处理及动态请求的转发更是显得绰绰有余,它的负载均衡功能也为以后的扩展提供良好的保证。由于本项目的后台开发语言使用JAVA,因此APP上面选用了大名鼎鼎的Tomcat用来处理前端Nginx转发的动态请求。后台数据采用Mysql,Tomcat与DB使用 JDBC连接。
expires 24h; #控制页面缓存时间

连接参数的配置也是修改connector参数,主要有:

编辑安装目录下conf/server.xml
maxSpareThreads="75"
问题2:访问Nginx上的应用连接不到数据库,但直接访问Tomcat正常。将Nginx指向其他APP访问正常,说明Nginx配置没有问题,连接不到数据库是因为Nginx连接不到Tomcat,而Tomcat连接着数据库,Nginx只能访问自己本地的项目。从以上判断应该是Tomcat上项目的权限问题。找到故障点后着手解决,发现Tomcat上项目主目录下没有crossdomain.xml文件,这是Tomcat的跨域策略文件,配置后问题解决。

最后将项目的静态文件及动态文件分别部署到Nginx和Tomcat上,做到动静分离。Tomcat上没有必要放置多余的静态文件,但要配置好和后台数据库连接的jdbc,如:


www - nofile 1006154
#Nginx支持if判断并内置很多变量,如下面的$request_filename为请求的文件名。该if语句在location{}中,因此判断以.html .jsp等结尾的文件请求如果在本地不存在,则转发到tomcatapp中去处理。if语句在Nginx中一般和rewrite搭配用以实现URL的重定向。需要注意的是安装Nginx时./configure后面要有--with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module等几个参数,否则nginx.conf中出现if会报错如:nginx unknown directive "if" in /usr/local/nginx/conf/nginx.conf。至于哪个参数决定可以使用if还没有测试,总之都加上就好。


keepalive_timeout 65; #设置长连接超时时间





}





}
第一阶段:3台服务器组成的Nginx+Tomcat+Mysql可扩展架构





sendfile on;

数据库名.表名可以*.*表示所有



之后FLUSH PRIVILEGES;即可
break;

mysql -uroot -p
}

第一阶段的生产环境搭建完毕,还有很多需要测试和优化的地方,这期间Google也帮了大忙,第二阶段的扩展也会在这个基础上展开,记录与总结也会继续。

1、架构
proxy_pass ; #这是要转发的服务器列表,名字随便起,要和upstream后面接的列表名对应

#error_log logs/error.log notice;
配置开启最大线程为500,25个空线程等待,75个最大空线程等待及连接数大于maxThreads时最多允许100个连接等待。以上根据实际项目配置,也可以配置线程池。
jdbc.driverClassName=com.mysql.jdbc.Driver



#下面开始虚拟主机的配置
2.2.2线程及连接
#以下配置设置Nginx在反向代理的时候发送域名和用户真实IP给后端APP

#user nobody;
jdbc.password=root

/>



Tomcat要根据实际的生产环境进行优化,主要有以下几个需要修改的地方
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";
events {

use epoll; #使用epoll模式


问题3:一切就绪后使用Loadrunner进行压力测试,Nginx日志报错accept() failed (24: Too many open files),这是由于服务器开的文件描述符太小造成。ulimit –n只能改变当前shell的设定,要永久改变有以下三步:






Tomcat集群是在多台主机上实现负载均衡的技术,由于APP目前只有一台主机,集群到了第二阶段才能考虑。

#charset koi8-r;


proxy_pass ;
maxThreads="500"



}
2.2.1内存





2.1 Nginx配置
}

error_page 500 502 503 504 /50x.html;
Nginx配置文件nginx.conf:
#gzip on;

default_type application/octet-stream;
session required /lib/security/pam_limits.so

#access_log logs/host.access.log main;
}
server_name 192.168.1.3; #本机IP,写localhost或申请的域名也可以,URL处输入
问题1:连接不到后台数据库,但数据库本身没有问题,服务开启并且也可以登录。在排除了防火墙之类的配置后,用其他主机远程登录提示Access denied for user 'root'@'ip' (using password: YES),mysql默认禁止远程连接,解决办法:

MaxKeepAliveRequests 为一次连接可以进行的HTTP请求的最大请求次数,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间

listen 80; #开启80端口提供服务





权限分为select,update,insert,delete或者直接all
proxy_redirect off;
#下面是配置.html .jsp .swf等静态文件本地处理,要用到正则表达式

proxy_set_header X-Real-IP $remote_addr;
2.2.4集群

(1.) /etc/pam.d/login添加

<Connector port="8080"

用户密码不是本机真实密码,为本机给远程登陆用户设的密码


location = /50x.html {
}

minSpareThreads="25"
index index.jsp index.html index.htm;

#pid logs/nginx.pid;


worker_connections 60000; #允许的连接数

3、部署及问题

root /var/www;



#error_log logs/error.log;
虚拟主机是在一个实例中的server.xml中配置多个虚拟目录以指向相同或不同项目,多实例是安装多个Tomcat实例,修改为不同端口,启动不同进程实现不同项目或者同项目的访问,与虚拟主机不同的是多实例可以实现简单的单台主机上的负载均衡。具体配置这里不介绍了。
2、配置


if (!-f $request_filename) {
www 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大
proxy_set_header Host $host;
#access_log logs/access.log main;
登录主机'%'表示所有
upstream tomcatapp { #转发并负载均衡的服务器写在这下面
jdbc.username=root
2.2 Tomcat配置
location / {
connectionTimeout 网络连接超时,单位毫秒,设置为0表示永不超时
Mysql的表结构是开发人员根据程序需要来设计,这个要根据项目区分。

(2.) /etc/security/limits.conf添加

http {


#以下为全局配置,除了以上的静态文件之外,所有请求都转发给proxy_pass后设置的服务器列表去处理
server 192.168.1.2; #Tomcat服务器地址


(3.) 修改/etc/rc.local添加

root /var/www; #Nginx根目录,可以在http、server或location设置
}




#error_log logs/error.log info;

echo 8061540 > /proc/sys/fs/file-max
include mime.types;

server {



2.2.3多虚拟主机及多实例

worker_processes 8; #开启8个进程,根据CPU个数调整
acceptCount="100"


别忘了还有个连接DB的驱动jar包。这样一个Nginx+Tomcat+Mysql架构的项目就部署完毕。接下来说说遇到的问题。
keepAliveTimeout 长连接最大保持时间,单位毫秒





jdbc.url=jdbc:mysql://192.168.1.1:3306/kingdom?characterEncoding=utf-8
2.3 Mysql
mysql>GRANT all privileges ON *.* to root@'%' IDENTIFIED BY "root" with grant option;

免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。