编译安装Nginx
Linux最小化安装后,还需要进行安装的软件
yum groupinstall "Compatibility libraries" "Base" "Development tools"
yum groupinstall "debugging Tools" "Dial-up Networking Support"
yum install tree telnet dos2unix sysstat lrzsz nc nmap -y
yum grouplist(查看所有包组名称,安装的和未安装的)
yum groupinstall "Development Tools"
关闭防火墙:
setenforce 0
1.安装所需的pcre、pcre-devel、openssl、openssl-devel库
cat /etc/redhat-release
uname -r
yum install pcre pcre-devel -y
rpm -qa pcre pcre-devel
yum install openssl openssl-devel -y
rpm -qa openssl openssl-devel
yum install gcc-c++ -y
mkdir -p /home/hty/tools
cd /home/hty/tools/
wget -q http://nginx.org/download/nginx-1.6.3.tar.gz
ls -l nginx-1.6.3.tar.gz
useradd nginx -s /sbin/nologin -M
tar xf nginx-1.6.3.tar.gz
./configure --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
ln -s /application/nginx-1.6.3 /application/nginx/
ls -l /application/nginx/
检查Nginx配置文件语法:
/application/nginx/sbin/nginx -t
启动Nginx服务:
/application/nginx/sbin/nginx
查看Nginx端口是否成功启动:
lsof -i :80
netstat -lnt|grep 80
检测Nginx是否启动
wget 127.0.0.1
或者curl 127.0.0.1
或者在Windows浏览器上访问服务器的地址就可以查看是否启动
eg:当启动Nginx出现如下错误时:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
原因是80端口被占用了
解决方法:
sudo fuser -k 80/tcp
关闭占用80端口的程序,在启动Nginx
***
Nginx服务不能启动时,首先从内部开始查找
netstat -lntup 查看端口状态
cd /application/nginx/
cd conf/
cat nginx.conf 进入配置文件
ip a 查看子网地址
curl 172.16.0.4 ping子网
***
作业:部署一个Web站点:
cd /application/nginx/html/
rm -f index.html
vi index.html
<html>
<head>
<title>hty's Nginx server blog.</title>
</head>
<body>
Hi, I am hty.
</body>
</html>
2.Nginx 主配置文件nginx.conf
查看Nginx核心配置参数:
egrep -v "#|^$" nginx.conf.default(去掉所有默认注释行)
结果:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.Nginx其他配置文件
默认情况下为注释状态:FastCGI相关配置
查看:cat fastcgi.conf
*********************************************************************
4.虚拟主机的配置
类型:
a.基于域名的虚拟主机
(1)基于域名的nginx.conf内容
cd /application/nginx/conf
diff nginx.conf.default nginx.conf
egrep -v "#|^$" nginx.conf.default >nginx.conf
或者直接创建新的配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
(2)创建域名对应的站点目录及文件
[root@instance-yf0xzby9 conf]# mkdir ../html/www -p
[root@instance-yf0xzby9 conf]# echo "http://www.etiantian.org" >../html/www/index.html
[root@instance-yf0xzby9 conf]# cat ../html/www/index.html (../表示上级目录)
http://www.etiantian.org
作用:创建了一个html/www站点目录,对应于虚拟机配置文件root根目录的
html/www设置(root html/www),然后生成一个默认的首页文件index.html。
其内容为http://www.etiantian.org。
(3)检查语法并重新加载Nginx
平滑启动:
../sbin/nginx -s reload
(4)测试域名站点的访问结果
echo "172.16.0.4 www.etiantian.org" >>/etc/hosts
tail -l /etc/hosts
curl www.etiantian.org(在监听的端口不是80时,可以在域名后加上端口号
来进行区分)
b.基于端口的虚拟主机
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8089;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 8090;
server_name bbs.etiantian.org;
location / {
root html/bbs;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 8091;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@instance-yf0xzby9 conf]# mkdir ../html/www -p
[root@instance-yf0xzby9 conf]# echo "http://www.etiantian.org" >../html/www/index.html
[root@instance-yf0xzby9 conf]# cat ../html/www/index.html (../表示上级目录)
http://www.etiantian.org
../sbin/nginx -s reload
echo "172.16.0.4 www.etiantian.org" >>/etc/hosts
tail -l /etc/hosts
curl www.etiantian.org:8089(在监听的端口不是80时,可以在域名后加上端口号
来进行区分)
c.基于IP的虚拟主机
(1)在服务器上增加多个IP
ip addr add 10.0.0.9/24 dev eth0
ip addr add 10.0.0.10/24 dev eth0
(2)增加虚拟主机配置
在监听端口设置仅仅基于IP即可,每个主机的server_name字段都换成IP地址
*********************************************************************
5.重启Nginx后检测策略
步骤:
a.重启Nginx;
b.调用脚本获取header信息或模拟用户访问指定URL来自动检查Nginx是否正常启动
c.在非语法问题时,迅速使用上一版备份配置文件覆盖会来
检查启动是否正常的脚本,可以包含在Nginx启动脚本的start等启动位置
虚拟主机配置文件和主配置文件分离:
vi nginx.conf
sed -n '10,21p' nginx.conf
sed -n '10,21p' nginx.conf >extra/www.conf
sed -n '22,33p' nginx.conf
sed -n '22,33p' nginx.conf >extra/bbs.conf
sed -n '34,45p' nginx.conf
sed -n '34,45p' nginx.conf >extra/blog.conf
sed -i '10,45d' nginx.conf
cat -n nginx.conf(查看配置文件,袋数字)
sed -i '10 i include extra/www.conf;\ninclude extra/bbs.conf;\ninclude extra/blog.conf;' nginx.conf
1 worker_processes 1;
2 events {
3 worker_connections 1024;
4 }
5 http {
6 include mime.types;
7 default_type application/octet-stream;
8 sendfile on;
9 keepalive_timeout 65;
10 include extra/www.conf;
11 include extra/bbs.conf;
12 include extra/blog.conf;
13
14 }
./sbin/nginx -t
../sbin/nginx -s reload
curl www.etiantian.org等
6.域名别名的设置
在server_name 中添加别名,不同别名之间使用空格隔开
并在/etc/hosts文件中添加响应的别名
可以解决的问题:可以通过别名,在监控服务里配置hosts来监控不同域名的等
地址是否正常,进而判断每台机器上的www.etiantian.org是否正常。
7.Nginx信息状态功能
模块:ngx_http_stub_status_module
功能:记录Nginx的基本访问信息
(1)查看是否有这个模块:
/application/nginx/sbin/nginx -V
(2)配置Nginx status
##status
server{
listen 80;
server_name status.etiantian.org;
location / {
stub_status on;
access_log off;
}
}
EOF