【整合篇】CENTOS7下配置nginx与nodejs(yum安装)

Centos7最小安装后添加nginx 1.13.2nodejs 8.0.0,配置WEB服务器运行,并设置开机自行启动服务。

搭建期间遇到的系列问题:nginx站点proxy502和403错误、nginx配置错误无法开启、nginx启动成功但访问出错、node服务开机自启动。

如果不是用ROOT用户登录,操作指令前务必输入sudo获取root权限!

本文目的:配置最小系统的CENTOS7下nginx+node环境,并在nginx下设置反向代理,实现node站点运行。

一.准备工作

查看网络连接

如果用virtualbox等虚拟机安装,需将网络连接修改为:桥接网卡高级-混杂模式-允许虚拟电脑

[root@nooldey]# cd /etc/sysconfig/network-scripts/
[root@nooldey]# ls
#查找列表中ifcfg-enXXX
[root@nooldey]# vi ifcfg-enp0s3
#找到ONBOOT=no修改为ONBOOT=yes
#:wq保存退出编辑
[root@nooldey]# service network restart

重启网络成功后显示如下:
centos-node1

安装编译环境

[root@nooldey]# yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel
#openssl openssl-devel

【安装包说明】

`gcc gcc-c++`:LINUX系统下的软件安装都是二进制文件在系统本地进行c++编译后安装的,需要本地c++编译环境;
`pcre`:Perl Compatible Regular Expressions正则表达式库;
`zlib zlib-devel`:gzip解压缩工具;
`openssl openssl-devel`:远程ssh登录

至此,以上安装完毕后,就可以在xshell上开心地用ssh远程连接开始管理了!


二.配置nginx环境

安装nginx

本文采用yum安装方式,另一种方式参考CENTOS7下从零开始配置nginx并开机启动(wget方法)

最新nginx安装包地址查看:http://nginx.org/packages/centos/7/noarch/RPMS/ 选择release版。

#将nginx加入yum repo库
[root@nooldey]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
#查看nginx信息,包括环境、版本、证书等
[root@nooldey]# yum info nginx
#安装nginx
[root@nooldey]# yum -y install nginx

安装前配置时界面:
centos-node2

安装完毕显示界面如下图:
centos-node3

启动nginx

启动nginx前,务必检查下nginx是否安装正常,用指令nginx -v,如果返回版本信息,则安装正常。

#启动nginx服务
[root@nooldey]# service nginx start
#检查nginx状态
[root@nooldey]# service nginx status

成功启动后界面如下:
centos-node4

这时,在外网还是无法连接访问新站点(http://192.168.31.159),因为防火墙还未关闭,有两种方法,一是放开防火墙的80端口,允许外网访问该端口,二是直接关闭防火墙。

本文,我们采用关闭防火墙(CentOS7的防火墙为firewalld)的办法,因为后面的测试可能用到其他端口。

#查看防火墙状态
[root@nooldey]# service firewalld status
#关闭防火墙
[root@nooldey]# service firewalld stop
#禁止防火墙开机启动
[root@nooldey]# systemctl disable firewalld.service

关闭防火墙后,再次访问我们的本地站点(http://192.168.31.159)。

centos-node5

恭喜!成功搭建nginx站点!

然鹅,当我们重启centos后,呜呜,站点无法访问了!

没关系,设置开机自动启动nginx就搞定了。

#开机启动nginx
[root@nooldey]# systemctl enable nginx.service

搞定!可爱的nginx欢迎页面又回来了!


三.配置node环境

安装nodejs

这里同样采用yum安装方式,另一种方式参考CENTOS7下安装nodejs(wget方法)

各个系统nodejs安装方式:https://nodejs.org/en/download/package-manager/

#添加nodejs至yum repo,node8.x竟然还没有出
[root@nooldey]# curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
#安装node
[root@nooldey]# yum -y install nodejs

centos-node7

centos-node7

最近网络有点抽风,截图的时候只能装node v7.x系列版本,更新时竟然正常下载安装了node v8.2.0!!


四.配置ftp

参阅本站ftp专题文章:CENTOS7下配置vsftpd

配置完毕后,ftp上传的默认目录即为我们放置站点的统一路径:/var/www/ROOT


五.配置站点

注意事项

采用yum安装和wget下载安装,nginx的目录结构是有区别的

本文对应的nginx主要目录如下。

/usr/share/nginx/html【默认nginx的站点文件目录】

/etc/nginx/conf.d【默认nginx的站点配置文件目录】

配置站点nginx.conf

假定站点文件放置路径:/var/www/ROOT.
设置运行用户为:user nobody.

1.添加站点配置

[root@nooldey nginx]# cd /etc/nginx/conf.d
[root@nooldey nginx]# vi default.conf

设置站点配置如下:

server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /var/www/ROOT;
index index.html index.htm;
proxy_set_header Host $http_host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:xxxx;
}
location /assets/ {
root /var/www/ROOT;
access_log off;
expires 1h;
}
error_page 404 /404.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;
#}
}

2.上传站点文件

通过ftp上传至/var/www/ROOT目录下即可。

3.配置node站点npm包环境(在站点文件的上级目录下)

[root@nooldey nginx]# cd /var/www
[root@nooldey nginx]# npm init
[root@nooldey nginx]# npm install
#根据站点package.json安装所需要的modules
#npm i koa ...

运行node站点:

[root@nooldey nginx]# nohup node /var/www/ROOT/app.js &

六.测试站点(nginx站点proxy502和403错误)

兴高采烈地在windows火狐浏览器下打开站点,bong! 大大的502挂页面上!

各种谷歌,奇怪的是,我在另一台虚拟机上安装nginx1.13.2却并未遇到这个问题,猜测是新版本已经修复了这个bug。

#检查nginx状态
[root@nooldey nginx]# service nginx status -l

终于发现一条错误提示:

Jul 21 04:20:51 localhost.localdomain systemd[1]: Failed to read PID from file /var/run/nginx.pid: Invalid argument

这是因为systemd要求nginx执行前就拥有PID,执行命令:

#解决nginxPID错误
[root@nooldey nginx]# mkdir /etc/systemd/system/nginx.service.d
[root@nooldey nginx]# printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
[root@nooldey nginx]# systemctl daemon-reload

为了保证所有用户运行都可以保证web目录可访问:

#a:所有用户 +:增加权限 x:可执行
[root@nooldey nginx]# chmod -R a+x /var/www
[root@nooldey nginx]# chmod -R a+x /var/www/ROOT

重启再次访问,嗯,不是502错误了~ 是403 Forbidden!!!

这一次,不再猜测权限问题了,因为web目录现在是所有用户都可以读取和执行的!
Stack Overflow告诉我,这可能是SELinux的安全设置问题:

[root@nooldey www]# getenforce
Enforcing
#临时关闭SELinux
[root@nooldey nginx]# setenforce Permissive

再次访问站点,我靠!真的能访问了!

把SELinux重新开启,然后赋予nginx运行web目录的权限:

[root@nooldey www]# setenforce Enforcing
[root@nooldey www]# chcon -Rt httpd_sys_content_t /var/www

重启node服务,重启nginx,访问站点,ok!

七.骚年,你忘了设置开机自启动服务了!

以上六大部分设置完毕之后,基本上站点运行已经没有其他障碍了,但碎碎念这时候又想到,万一服务器突然抽风宕机了怎么办?

总不能在网站每次宕机之后都人工去一项一项服务地重启吧?

于是乎,就有了这一部分——开机自启动node应用。

在另一篇文章《CENTOS7下安装配置nodejs(wget方法)》中有提到简单的开机自启动node的方法,但那个方法有一个缺陷,必须开机后至少有一次用户登录的行为之后才能启动。

最靠谱的做法是:将node网站启动脚本封装为CentOS的系统服务

[root@nooldey ~]# cd /usr/lib/systemd/system/
[root@nooldey ~]# vi /usr/lib/systemd/system/nodeapp.service

在新建的nodeapp.service文件中填写内容:

/var/www/ROOT/app.js应对应为你所搭建的node站点的入口文件。

/usr/bin/node对应为node安装后的执行路径。

如果不确定node路径,可用whereis node搜寻,并拷贝bin路径。

[Unit]
Description=nodeapp.service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/bin/setsid /usr/bin/node /var/www/ROOT/app.js
Restart=/bin/pkill node && /bin/setsid /usr/bin/node /var/www/ROOT/app.js
ExecStop=/bin/pkill node
ExecReload=
PrivateTmp=true
RemainAfterExit=yes
ExecStartPre=
[Install]
WantedBy=multi-user.target

启动服务测试是否可以正常访问:

[root@nooldey ~]# systemctl start nodeapp

咦,正常访问了!那就赶快加入开机自动:

[root@nooldey ~]# systemctl enable nodeapp
NOOLDEY

本文作者:NOOLDEY

做一个诗情画意的码农,皮皮猪,我们走!

原文链接: http://zhuweisheng.com.cn/tech/centos-nginx-node/

本站文章如无特殊声明均为原创,创作不易,转载请注明来源,谢谢!

文章目录

  1. 1. 一.准备工作
    1. 1.1. 查看网络连接
    2. 1.2. 安装编译环境
  2. 2. 二.配置nginx环境
    1. 2.1. 安装nginx
    2. 2.2. 启动nginx
  3. 3. 三.配置node环境
    1. 3.1. 安装nodejs
  4. 4. 四.配置ftp
  5. 5. 五.配置站点
    1. 5.1. 注意事项
    2. 5.2. 配置站点nginx.conf
  6. 6. 六.测试站点(nginx站点proxy502和403错误)
  7. 7. 七.骚年,你忘了设置开机自启动服务了!