Author:zhuwei313@hotmail.com
Time:2014-11-22
一、安装nodjs及相关模块
约定:生产环境
Nodejs 0.10.22+
Express3.4.4+
Mongodb2.4.10+
资料共享者:1114789385@qq.com
1 安装gcc-c++,openssl,nodejs
yum install gcc-c++ openssl-devel
cd /usr/local/src
wget http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz
或者下载最新版
wget http://nodejs.org/dist/node-latest.tar.gz
tar zxvf node-latest.tar.gz
cd node-v0.10.22
./configure
make
make install
注意,./configure需要python2.6+
相关模块安装见附录:
二、安装ngix和nginx反向代理
1 安装nginx
安装第三方yum源
yum install wget #安装下载工具
wget http://www.atomicorp.com/installers/atomic #下载
sh ./atomic #安装
yum check-update #更新yum源
yum install nginx #安装nginx 根据提示输入y进行安装
chkconfig nginx on #设置nginx开机启动
service nginx start #启动nginx
2 配置nginx
配置nginx支持nodejs反向代理
cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak#备份原有配置文件
vi /etc/nginx/nginx.conf #编辑
user nginx nginx; #修改nginx运行账号为:nginx组的nginx用户
:wq #保存退出
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.confbak #备份原有配置文件
为什么是conf.d/default.conf
因为
导入了conf.d/下面的所有的*.conf
注意:如果您已经安装了lnmp环境,请额外的配置一个xxx.conf的文件(下面的default.conf一样的内容)
Default.conf配置如下:
#
# The default server
#
server {
listen 80;
#监听的端口,如果是在PHP的环境下,还要监听80端口,建议建立多个vhost.conf并配置
#我这里没有安装lanmp环境,就直接监听80端口,让127.0.0.1:3000直接跳转到localhost:80端口,如果你在lanmp下,请指定其他的端口
server_name localhost;
#默认主机名,可以是域名比如:www.daheige.com www.heige.com
#charset utf-8;
#默认编码
#access_log logs/host.access.log main;
//配置nodejs,nginx反向代理
#配置节点将告诉Nginx接收任意的请求
location / {
//用proxy_pass 指定了Node.js的后端服务器
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
#http版本1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
#root /usr/share/nginx/html;
#网站的根目录
#index index.html index.htm;
# example
#ModSecurityEnabled on;
#ModSecurityConfig /etc/nginx/modsecurity.conf;
}
#配置静态资源目录
#location /public {
# root /usr/local/var/www
#}
#error_page 404 /404.html;
#错误页面的配置
#location = /404.html {
# root /usr/share/nginx/html;
#}
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/html;
#}
# proxy the PHP sc
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP sc
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param sc
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
将网站域名设置好,然后端口设置为80,最后proxy_pass设置为http://127.0.0.1:3000,将所有从localost:80的请求传递到nodejs程序去。
重启nginx
访问域名,就可以了
注意:
这样我们就让Nginx在http://localhost:80上监听了。location / 配置节点将告诉Nginx接收任意的请 求,location 配置节点中我们用proxy_pass 指定了Node.js的后端服务器为http://localhost:3000 。
现 在我们要用另外一个配置节点location /public 来告诉Nginx处理静态文件请求,其中内部的location 节点设置了根目录为 /usr/local/var/www. 当然你也可以换成其他的目录。如此一来,当有类似这样的请求http://localhost:80 /public/somepath/file.html ,Nginx都会从/usr/local/var/www/public/somepath /file.html读取静态文件。
修改完配置文件后,你需要用下面的代码来重启Nginx
测试是否反向代理成功?创建一个app.js
var http=require('http');
//create httpServer
console.log('this server has started on localhost:80');
var server=http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<me
res.end('hello world,the nginx and nodejs pross success!');
});
server.listen(3000);
运行node app.js
我们大胆的设想下我们用nginx反向代理处理静态html,css,js的东西,让nodejs出去服务器的东西。下面我们配置一个基于域名的,监听到80端口上的配置下mytest.com.conf:
#mytest.com
#nodejs监听的端口是8080
#IP:127.0.0.1
#记得在/etc/hosts下添加127.0.0.1 mytest.com www.mytest.com
server {
listen 80;
#监听的端口,如果是在PHP的环境下,还要监听80端口,建议建立多个vhost.conf并配置
#我这里没有安装lanmp环境,就直接监听80端口,让127.0.0.1:8080直接跳转到localhost:80端口
server_name www.mytest.com mytest.com;
#默认主机名,可以是域名比如:www.daheige.com www.heige.com
#charset utf-8;
#默认编码
#access_log logs/host.access.log main;
#配置nodejs,nginx反向代理
#配置节点将告诉Nginx接收任意的请求
location / {
#用proxy_pass 指定了Node.js的后端服务器
proxy_pass http://127.0.0.1:8080;
#直接跳转到mytest.com:80上去
proxy_http_version 1.1;
#http版本1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
root /home/wwwroots/mytest.com;
#网站的根目录
#index index.html index.htm;
# example
#ModSecurityEnabled on;
#ModSecurityConfig /etc/nginx/modsecurity.conf;
}
#配置静态资源目录
#location /public {
# root /usr/local/var/www
#}
#error_page 404 /404.html;
#错误页面的配置
#location = /404.html {
# root /usr/share/nginx/html;
#}
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/html;
#}
# proxy the PHP sc
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP sc
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param sc
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
注意:在/etc/hosts下添加127.0.0.1 mytest.com www.mytest.com
实现了域名的解析成功
测试:
在/home/wwwroots/mytest.com/下建立一个app.js
var http=require('http');
//create httpServer
console.log('this server has started on mytest.com:80');
var server=http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<me
res.end('mytest.com!');
});
server.listen(8080);
运行node app.js
访问浏览器
虽然node.js本身就可以做服务器是没错啦,比如app.js里面设置为8080端口就可以了。通过nginx反向代理实现跳转到指定的mytest.com:80端口上。
如果一个机子跑多个网站,其他网站又是用别的服务器,在80端口已经被占用的情况下,是可以用代理到别的端口来处理。
比较lamp,lnmp环境和nodejs+nginx反向代理区别:
传统的lamp环境需要apache模块的支持,处理的能力相对于nginx来说是比较笨重,对于高并发量,apache比较吃力。后来我们使用lnmp来架设php的网站,我们发现nginx轻量,高性能的HTTP和反向代理处理速度惊人。
分析LNMP或LAMP的劣势
Nginx是一个小巧而高效的Linux下的Web服务器软件,与Apache相比,消耗资源更少,支持的并发连接,更高的效率,反向代理功能效率高、静态文件处理快等,但动态页面处理能力不如Apache等老牌软件成熟。单独使用Nginx处理大量动态页面时容易产生频繁的502错误。
Apache是一款老牌的Web服务器软件,在高并发时对队列的处理比FastCGI更成熟,Apache的mod_php效率比php-cgi更高且更稳定、对伪静态支持好,不需要转换、多用户多站点权限等方面有着更好的效果,单独使用Apache处理静态页面时,对内存的占用远远超过Nginx。
Nodejs+nginx
让nginx做反向代理,处理请求时候,我们用nodejs监听到某个IP,PORT上,用nginx反向代理跳转到80端口上,比如localhost:80上后,nginx帮助处理静态的html,css,js资源,让nodejs处理高并发的处理,nodejs天生的异步机制,单线程使得运行速度特别快。这两者的结合消耗资源少,高并发,静态文件处理特别快。
创建SSL
网站产品做多了,你会发现需要创建SSL来保护敏感的信息。可能你第一反应会想到从证书颁发机构申请网站证书,但是你也可以创建签名证书。唯一的问题就是浏览器端会提示“该证书不可信”的警告信息,但是作为本地测试,这也就足够了。这里有一篇教程讲解了如何自己创建签名SSL证书,可以看看。
当你有了自己的证书,你就可以在Nginx上安装SSL了,修改后的配置文件,代码如下:
server {
listen 8080;
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/server.crt
ssl_certificate_key /etc/nginx/ssl/server.key
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /public {
root /usr/local/var/www;
}
}
完 成了!这样当你访问https://localhost:8080 的时候SSL就可以开始工作了。这里我们默认将证书保存在/etc/nginx /ssl/server.crt 目录下。将私钥保存在/etc/nginx/ssl/server.key 目录下,你也可以改变保存的目录。
总结
如何用Nginx为Node.js做反向代理,并且配置SSL。由Nginx在前端处理静态文件请求,这可以为Node.js后端服务器大大减轻压力。
参考资料:http://www.topthink.com/topic/4585.html
http://blog.csdn.net/soasme/article/details/6713788
http://www.jb51.net/article/37986.htm
附录:
Nojs相关模块安装:
安装MySQL
1、安装MySQL
yum install mysql mysql-server #询问是否要安装,输入Y即可自动安装,直到安装完成
/etc/init.d/mysqld start #启动MySQL
chkconfig mysqld on #设为开机启动
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)
2、为root账户设置密码
mysql_secure_installation
回车,根据提示输入Y
输入2次密码,回车
根据提示一路输入Y
最后出现:Thanks for using MySQL!
MySql密码设置完成,重新启动 MySQL:
/etc/init.d/mysqld restart #重启
/etc/init.d/mysqld stop #停止
/etc/init.d/mysqld start #启动
3 安装express 已经把命令行工具分离出来了...
如果你要 Express 3
sudo npm install -g express@3.4.4
(安装的时候可能遇到网速的问题,请多试几次)
express 4 的话
sudo npm install -g express-generator
3 测试
切换到nodetest这是我自己创建的一个目录,创建一个应用目录blog,然后创建应用blog
进入到blog中
运行node app.js出错,这是不正确的,因为缺少启动文件,所以运行npm install
出现上述画面,表示安装项目需要的模块成功创建。
接着运行node start
这里注意3.x版本的express是node app运行,而4.x发生了变化,启动文件在bin/www
最后在浏览器中运行localhost:3000
整个blog的项目文件
对于如何创建应用和手册express4.x的使用,我会陆续给大家贡献的。
安装mysql模块
http://czpae86.iteye.com/blog/1636302
http://blog.csdn.net/jinbiao520/article/details/9902177
测试mysql模块
node进入node终端然后运行console.log(require(‘mysql’));
在linux下安装各种包
http://www.cnblogs.com/greenteaone/archive/2013/05/07/3065114.html
相关的模块安装如下:
安装geddy:npm -g install geddy
安装调试工具npm -g install supervisor
安装geddy
http://huangyuanmu.iteye.com/blog/1152406
安装mongodb
下载安装包:
1cd /tmp
2wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.4.10.tgz
2。解压:
tar -zxvf mongodb-linux-i686-2.4.10.tgz
3。指定安装目录:
mv mongodb-linux-i686-2.4.10 /usr/local/mongodb
4。新建mongodb数据文件存放目录:
mkdir -p /data/mongodb/db
5。新建log文件存放目录:
mkdir -p /data/mongodb/logs
6 cd /usr/local/mongodb/bin
第一种方式:
7。新建配置文件,mongodb支持把参数写进配置文件,然后以配置文件的配置来启动,我们此处也使用此方式。执行:
vi mongodb.conf
加入内容如下:
dbpath = /data/mongodb/db #数据文件存放目录
logpath = /data/mongodb/logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
nohttpinterface = true
rest=true
完整的mongodb.conf
dbpath = /data/mongodb/db
logpath = /data/mongodb/logs/mongodb.log
port = 27017
fork = true
rest=true
nohttpinterface = true
Vi /data/mongodb/logs/mongodb.log
保存退出:wq
重新绑定mongodb的配置文件地址和访问IP:
/usr/local/mongodb/bin/mongod --rest --bind_ip localhost -f /usr/local/mongodb/bin/mongodb.conf
8。启动Mongo程序,使用配置文件mongodb.conf定义的参数启动
./mongod --config mongodb.conf --rest
第二种方式:
**********************************开机启动和软连接*******
创建软连接
将mongo添加到/usr/local/bin中cd /usr/local/bin然后创建软连接
另外一种方式加入到开机启动
在/etc/rc.d/rc.local中添加
然后vi /etc/mongodb.conf添加
mongodb安装参照
http://gevin.me/289.html
开机自动启动
mongodb
执行 :
vi /etc/rc.d/rc.local
在文件中加入:
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf --rest
注意:默认mongodb的数据目录对应的是/data/db下面。日志目录对于到/data/logs/mongodb.log,如果是目录结构有调整需要重新指定配置的路径
到这里mongodb按照完毕
第三种方式mongo的目录加入到环境变量中:
vim /etc/profile在最后添加如下内容:
export PATH=$PATH:/usr/local/mongodb/bin
然后source /etc/profile
立即生效
linux下nodejs_nginx反向代理.zip
( 530.42 KB 下载:5 次 )
最佳答案
