
上回已经把Nginx安装前的一些先决条件准备完毕今天开始分享的Nginx的安装部署的知识点:

切换到Nginx的存储路径中去,上回已经将该文件上传到系统之中去了。
[root@Centos-6 ~]# cd /home/fengxin/

安装Nginx
①解压Nginx软件
[root@Centos-6 fengxin]# tar xf nginx-1.6.2.tar.gz
并且切换到Nginx目录之中去: cd nginx-1.6.2

②创建一个指定用户:
[root@Centos-6 nginx-1.6.2]# useradd nginx -s/sbin/nologin -M
这里为什么要创建一个用户呢?在linux中文件和进程都是需要用户来支持的,
这里我建立一个用户为Nginx并且不建立家目录:

③编译安装Nginx:三部曲
我可以通过 来了解Nginx的编译的一些参数:
[root@Centos-6 nginx-1.6.2]# ./configure --help
Nginx编译安装时核心的一些功能都会默认的安装进去,不需要人为的去指定某些功能。

编译参数如下:
./configure \
--user=nginx \
--group=nginx \
--prefix=/application/nginx1.6.2 \ 指定的安装,此路径可不存在,应该是自 动生成的。
--with-http_stub_status_module \ 状态模块。
--with-http_ssl_module open-ssl模块。

看编译是否安装成功一个是看在输出过程中是否有报错的提示,二一个就是
[root@Centos-6 nginx-1.6.2]# echo $?
0
只要是返回0就是正常!

这里安装是没有任何问题的,就可以用:
[root@Centos-6 nginx-1.6.2]# make

检查make是否正常。

最后三部曲的make install:
[root@Centos-6 nginx-1.6.2]# make install

同样严谨的进行一步步检查是否成功:

④退到上级目录,去版本号制作一个软连接:
[root@Centos-6 nginx-1.6.2]# cd ../
[root@Centos-6 fengxin]# ln -s /application/nginx1.6.2/ /application/nginx
并且查看软链后的结果:
[root@Centos-6 fengxin]# ll /application/nginx/

到此为止Nginx安装就完毕了,是不是比Apache安装要简单一些!

启动Nginx
启动前和Apache一样都是需要进行检查语法的:
[root@Centos-6 fengxin]# /application/nginx/sbin/nginx -t

确保语法正确后,正式启动Nginx:
[root@Centos-6 fengxin]# /application/nginx/sbin/nginx
启动的时候并不像Apache那样后面接一个启动start的命令参数。

查看服务端口是否正常开启:
[root@Centos-6 fengxin]# netstat -lntup|grep nginx

也可以通过端口反向查询Nginx服务:
[root@Centos-6 fengxin]# lsof -i :80

客户端验证Nginx是否部署成功
在客户端上的浏览器上输入相应的服务器IP地址:

如果在客户端上没有显示成功的话,排故的思想如下:一个运维高手的重心往往都是在排故方面的侧重点高于部署方面!
①在系统本地:[root@Centos-6 fengxin]# curl 192.168.8.189
证明本地系统的web服务是正常的。

②查看selinux的状态是否开启:如果是enabled就是证明该防卫服务开启。
关闭selinux的技术文档链接:
https://jingyan.baidu.com/article/6d704a131ba67828da51ca73.html
[root@Centos-6 fengxin]# /usr/sbin/sestatus -v
经查看该服务是开启的,所以我要将此服务关闭

永久关闭:
[root@Centos-6 ~]# vi /etc/sysconfig/selinux

最后查看该服务状态为关闭状态:
[root@Centos-6 ~]# /usr/sbin/sestatus -v

当然,除了selinux之外,我们还需要关闭linux系统本身的防火墙:
[root@Centos-6 ~]# /etc/init.d/iptables stop

③ping通服务器IP地址后,还需要对该IP的服务端口进行查看,看看客户端浏览器到web服务是否正常!

如果服务正常的话,该端口会提示如下信息:

④最后依靠日志来分析故障的源点:
[root@Centos-6 ~]# cat /application/nginx/logs/error.log

这里面的错误就很明确的提示了我的192.168.8.176这个客户端的请求失败了,可能原因就是防火墙给隔离了。

Nginx部署站点
切到nginx的目录下面,观察他下面的一些配置文件
[root@Centos-6 ~]# cd /application/nginx/

和Apache一样的是,Nginx的主配置文件在conf下面:
但是Nginx没有extra这个文件。(extra 指的是额外的apache配置文件目录(由于主配置文件多而长,所以这里产生了一个从配置文件。是被包含的关系),这个目录里的文件我们会经常访问修改)

那么Nginx的默认站点目录是什么呢?
它的参数是root 站点是html
[root@Centos-6 conf]# grep html nginx.conf

①进入到默认站点目录之中:
[root@Centos-6 /]# cd /application/nginx/html/

编辑html下的index的目录文件下:
[root@Centos-6 html]# vim index.html

在这里,我们可以修改它的首页文件达到我想要的结果:
例如,我在这里部分修改文字:

②在客户端浏览器上刷新IP地址后,显示结果如下:你要是点击baidu.com就直接跳转到百度页面了。


Nginx的主配置文件_Nginx.conf的参数
Nginx的配置文件是一个纯文本文件,它位于Nginx安装目录的conf目录下,整个配置文件是以块的形式组织的,每一个块一般以一个‘{}’大括号来表示,其中块可以分为几个层次,整个配置文件中的Main指令位于最高层,在Main层下面可以有Events、HTTP等层级,而在HTTP层中又包含有Server层(server block,server block又可分为location层,并且一个server block 中可以包含多个location block.)
观察下Nginx的主配置源文件:
[root@Centos-6 nginx]# pwd
/application/nginx
[root@Centos-6 nginx]# cd conf/
[root@Centos-6 conf]# vim nginx.conf
在配置文件中,我们可以看到events http location server的模块,并且以{}来表示。Nginx的配置文件中的组织形式无非就是{}里面包含大括号......


这样的配置文件看起来很庞大,我需要用过滤的命令将注释、空格,空行的内容过滤掉并以行号显示:(着需要基础的知识命令)
-n代表显示行号。
[root@Centos-6 conf]# egrep -vn "#|^$" nginx.conf

也可以用cat -n 显示正序排列的行号输出:
[root@Centos-6 conf]# egrep -v "#|^$" nginx.conf|cat -n
这样看起来是不是会很舒服呢?

现在分享一下Nginx的主配置文件的一些参数:
[root@Centos-6 conf]# vi nginx.conf
Nginx的配置文件都是需要用;来结尾的!

Nginx配置文件参数
#user nobody; Nginx的默认用户,我部署Nginx的时候已经改为Nginx的用户了;回想一下Apache的默认用户deamon.
worker_processes 1; 这里就是制定有几个worker模式的进程数;这里的进程数建议和服务器配置的CPU核数相当。Nginx的默认进程_worker进程。Nginx的程序的进程模式是一个主进程多个子进程。
我用过滤命令能查看到系统中的Nginx的进程:
[root@Centos-6 conf]# ps -ef|grep nginx|grep -v grep
因此,Nginx主配置文件中的worker_processes 1; 就是控制这些进程的数量,进程多的时候效率就高!请求大的时候,worker进程也就要多一些,作用在于服务这些大量的请求!

错误日志的级别:
#error_log logs/error.log; 级别为error
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; Nginx的进程号。
events {
worker_connections 1024;
} 可以理解为worker的连接数。(Nginx连接请求的最大数量。)
HTTP访问日志的格式:
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; 访问日志要不要记录。


在实际的企业生产中,Nginx配置文件中修改的最多的参数如下:

server {
listen 80; 监听的端口号
server_name localhost; 域名
location / { 根据前面的前面的结果执行后面的内容,URL跳转的意思。
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;当网站出现500-504错误时,会给用户一个错误页面的提示而不是错误日志数值,这样页面的用户体验效果会很友好。
location = /50x.html {
root html;
}
}
}
这就是涉及到Nginx的虚拟主机,我前文总结过Nginx的一个虚拟主机是由一个server标签构成的。
可以了解下fastcgi.conf文件的内容:
[root@Centos-6 conf]# cat fastcgi.conf
配合动态的时候需要获取一些地址字符串等,通常情况下是不会去修改的。
后续的动态优化会对此文件进行分享。


配置Nginx虚拟主机
基于域名创建Nginx的虚拟主机
①创建域名分别是:
www.fengxin.cn
vip.fengxin.cn
oa.fengxin.cn
②创建虚拟主机站点目录:
[root@Centos-6 html]# pwd
/application/nginx/html
[root@Centos-6 html]# mkdir www
[root@Centos-6 html]# mkdir vip
[root@Centos-6 html]# mkdir oa

然后做一个语句for循环:(如果不会写循环语句,就用echo一个个的向文件中写入特定的语句)
[root@Centos-6 conf]# for n in www vip oa;do echo "$n.fengxin.cn" >../html/$n/index.html;done
最后还可以看下写正确没:
[root@Centos-6 conf]# for n in www vip oa;do cat ../html/$n/index.html;done


③创建虚拟主机配置文件
为了将#号 空格 去掉,更方便更清晰操作此配置文件,我做如下操作:
注意的是不能直接定向回去,否则会有问题。
[root@Centos-6 conf]# egrep -v "#|^$" nginx.conf >n.log
[root@Centos-6 conf]# cp n.log nginx.conf
cp:是否覆盖"nginx.conf"? y
[root@Centos-6 conf]#
这样看起来是不是更清晰一些!

具体修改的虚拟主机配置文件如下:重点修改的是server模块,注意这里面的{}标签一定是有层次架构的,多一个少一个在语法检查上都是通过不了的。


④检查语法:
结果输出中一定出现红框的提示。

⑤平滑重启Nginx服务:
注意的是同一个IP下,一个端口只能有一个服务在跑,如果你还运行着apache服务的话,那么可能会报错的!
[root@Centos-6 /]# /application/nginx/sbin/nginx -s reload

⑥因为是基于域名,又要在本地进行测试,所以要修改本地的hosts的文件。
如果你是win10的客户端的话,就需要注意:Win10系统默认是没有权限去编辑保存系统里的文件,这也是权限不够才导致修改编辑hosts后无法保存的原因,解决的办法就是把自己的帐户权限给提高就行了。(实际生产中不轻易去改,否则安全软件给你报错提示的。)
参考解决方案:
http://jingyan.baidu.com/article/624e7459b194f134e8ba5a8e.html





