centos6.5搭建nginx+nodejs+mysql+memcached

需要的下面四个工具最好都采用yum安装,不要采用编译安装的方法,因为编译安装会导致某些依赖关系丢失。

nginx 作为HTTP和反向代理,处理静态页面,动态服务交由nodejs服务。

nodejs作为处理动态事件的服务器。

mysql是数据库。

memcahed是一个数据缓存系统,为mysql提供缓存功能

首先安装nginx

#安装nginx的rpm包,如果yum能找到对应的包,可以不做这一步

yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx                    #安装nginx
chkconfig nginx on                   #设置nginx开机自启
/etc/init.d/nginx start              # 启动Nginx服务
或者使用
service nginx start                  #start 或者 stop 或者 restart
/etc/init.d/nginx stop               # 停止Nginx服务
chkconfig --list|grep nginx          #查看nginx的启动权限,这条命令的功能搜一搜就好

#可以通过nginx -v 查看安装版本

#启动服务后,可以通过在浏览器访问http://losthost 看到默认的nginx服务器页面

其中,/etc/nginx/nginx.conf       是 Nginx默认安装配置文件位置,后面会用到

安装node.js

#安装epel源,否则yum上找不到nodejs

yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#安装nodejs 和 npm ,npm是nodejs的一个包管理器之类的软件。
yum install nodejs npm
#可以通过node -v 查看安装版本
express是nodejs的一个框架软件,很好很方便
#安装express, -g 是代表全局安装,d是同时安装依赖关系,这一步骤可以跳过,直接安装express命令行工具。
npm install express -gd
#安完后如果命令行中没有express命令,执行下面这条安装指令,一般都是要安装的,express 4.x版本都需要安装这个命令行工具
npm install -g express-generator
#可以通过express -v 查看安装版本(也许是-V,就是这俩)

#安装mysql

yum install mysql
yum install mysql-server
yum install mysql-devel

#mysql查看是否安装成功,进入mysql命令行输exit退出来

使用mysql

mysqladmin -u root password root   #第一个root是root账户,第二个root是需要设置的密码,这里以“root”为例
mysql -u root -p       #以root用户登录mysql,会要求你输入密码,就输入刚刚设置的密码

#接下来就是基本的数据库操作,这里不再赘述

面设置mysqld开机自启动,mysql的服务叫做mysqld

service nginx start                   #启动mysqld服务,这里类似上述的nginx服务
chkconfig mysqld on                   #设置nginx开机自启
安装 memcached
#安装memcached
yum install memcached
#查看是否安装成功
memcached -h
#启动服务,默认会在11211端口启动,其他参数自行百度
service memcached start
#依然是设置开机自启
Chkconfig memcached on

架设服务器

环境配置好了,就可以架设服务器了

通过nginx建立nodejs服务器的反向代理

#用express创建一个nodejs项目

express a_node      #a_node是我随意起的项目名

#cd 进入你刚刚创建的项目文件夹,进行相应的module安装

npm install                #可以通过修改package.json来选择安装哪些包,express会默认帮你设定一些必要的包,你还可以自己添加,可以搜索学习一下package.json的参数。这一步之后,基本的nodejs项目已经可以运行,但因为还要连接mysql和memcache所以下面继续安装包

#这时在命令行中cd进项目目录, npm start 可以启动nodejs的服务器,默认在localhost:3000开启

#访问localhost:3000可以看到express的页面

npm install mysql            #mysql的包安装
npm install memcached        #memcached的包安装

/etc/nginx/nginx.conf 这个文件就是调用conf.d中所有配置文件的配置文件,想添加自己的配置文件最好不要修改/nginx.conf和default.conf了,自己在conf.d中建立一个.conf文件

cd /etc/nginx/conf.d 可以看到default.conf 这是默认的配置文件,可以通过修改它使nginx支持php等操作(默认支持php页面的代码被注释掉了,可以取消注释来建立)

/etc/nginx/conf.d 中建一个支持反向代理的.conf文件
upstream nodejs{
      server 127.0.0.1:3000;   #3000是你刚刚nodejs建立的服务器端口号
    }
server {
        listen 8080;    #8080是你的nginx代理端口
server_name localhost;
 
location / {
       proxy_pass http://nodejs;     #调用upstream的那个端口
   }
}

接下来重启nginx服务

service nginx restart

这时访问localhost:8080应该能看到localhost:3000的对应页面,如果出现502错误可以去/var/log/nginx里的err.log看看错误日志,比如权限问题,可以

#关闭selinux服务,解决connect() to 127.0.0.1:8080 failed(13: Permission denied)
setbool -P httpd_can_network_connect 1
#关闭selinux服务,解决connect() to 127.0.0.1:8080 failed(13: Permission denied)
setbool -P httpd_can_network_connect 1


 以上基本的nodejs服务器和nginx代理服务器都算建立了,可以修改nginx.conf配置文件来确定哪些页面请求使用代理,哪些页面请求直接处理

附一篇nodejs通过memcached查询mysql的代码

//这个文件命名为sel.js,放在nodejs项目中的routes文件夹里
var express = require('express');
var URL = require("url");
var mysql = require("mysql");
var cache = require('memcached');
var router = express.Router();
 
router.get('/', function(req, res, next) {
	var memcached = new cache('localhost:11211');//新建cache连接
	memcached.get(URL.parse(req.url,true).query.name,function(err,rows){
		if(err) console.log(err);
		if (rows) {			//如果mmecache查到了
			res.send(rows);
			console.log("find in cache");	//显示查询结果
		} else{					//否则新建mysql连接
				console.log("not find in cache");
				var con = mysql.createConnection({
					host:'localhost',
					user:'root',
					password:'root',
					database:'nodetest',
					port:3306
				});
				con.connect();				//连接查询
				console.log("connect the mysql");
				con.query('select id from peo where name =?',[URL.parse(req.url,true).query.name], function(err0,rows1) {
					if (err0) console.log(err0);
					if (rows1 != "") {			//MYSQL中存在记录,将记录写回memcache,同时送给前台
						console.log("find in mysql");
						res.send(rows1);
						memcached.set(URL.parse(req.url,true).query.name,rows1,10000,function(err0,rows1){
							if(err0) console.log(err0);
							console.log("save into cache");
						});
					} else{			//mysql中不存在记录,输出不存在
						console.log("no record");
						res.send("no record");
					};		
				});
				con.end();
				console.log("end line of mysql");
			};
	memcached.end();
	console.log("end line of cache");
	});
});
module.exports = router;

//修改nodejs项目文件夹中的app.js文件
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/sel', require('./routes/sel'));  //这里是刚刚建立的sel路由文件,上下文对照代码自己找

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');

当然,你还可以在app.js中增加路由调用,然后在routes文件夹中写更多自己的模块,那就需要你深入的学习nodejs了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/278.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。