编译安装 Nginx
1)安装支持软件
Nginx 的配置及运行需要 pcre、zlib 等软件包的支持,因此应预先安装这些软件的开 发包(devel),以便提供相应的库和头文件,确保 Nginx 的安装顺利完成。
[root@localhost ~]# yum -y install pcre-devel zlib-devel
2)创建运行用户、组
Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确
地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为 nginx 的用户,不建
立宿主文件夹,也禁止登录到 Shell 环境。
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
3)编译安装 Nginx
配置 Nginx 的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为
nginx;启用 http_stub_status_module 模块以支持状态统计,便于查看服务器的连接信息。
具体选项根据实际需要来定,配置前可参考“./configure –help”给出的说明。
[root@localhost ~]# tar zxf nginx-1.12.0.tar.gz
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx
–group=nginx –with-http_stub_status_module
[root@localhost nginx-1.12.0]# make && make install
为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管理员
直接执行“nginx”命令就可以调用 Nginx 的主程序。
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.0]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx ->
/usr/local/nginx/sbin/nginx
Nginx 的运行控制
1)检查配置文件
与 Apache 的主程序 httpd 类似,Nginx 的主程序也提供了“-t”选项用来对配置文件
进行检查,以便找出不当或错误的配置。配置文件 nginx.conf 默认位于安装目录下的 conf/
子目录中。若要检查位于其他位置的配置文件,可使用“-c”选项来指定路径。
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)启动、停止 Nginx
直接运行 Nginx 即可启动 Nginx 服务器,这种方式将使用默认的配置文件,若要改用其
他配置文件,需添加“-c 配置文件路径”选项来指定路径。需要注意的是,若服务器中已
装有 httpd 等其他 Web 服务软件,应采取措施(修改端口、停用或卸载)避免冲突。
[root@localhost ~]# nginx 通过检查 Nginx 程序的监听状态,或者在浏览器中访问此 Web 服务(默认页面将显示“Welcom to nginx!”),可以确认 Nginx 服务是否正常运行。
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
7180/nginx: master
[root@localhost ~]# yum -y install elinks
[root@localhost ~]# elinks ? ?http://localhost?? 使用 elinks 浏览器
//显示“Welcome to nginx!”页面,表明 Nginx 服务已经正常运行
主程序 Nginx 支持标准的进程信号,通过 kill 或 killall 命令发送 HUP 信号表示重载
配置,QUIT 信号表示退出进程,KILL 信号表示杀死进程。例如,若使用 killall 命令,重
载配置、停止服务的操作分别如下所示(通过“-s”选项指定信号种类)。
[root@localhost ~]# killall -s HUP nginx //选项 -s HUP 等同于 -1
[root@localhost ~]# killall -s QUIT nginx //选项 -s QUIT 等同于 -3
当 Nginx 进程运行时,PID 号默认存放在 logs/目录下的 nginx.pid 文件中,因此若改
用 kill 命令,也可以根据 nginx.pid 文件中的 PID 号来进行控制。
3)添加 Nginx 系统服务
为了使 Nginx 服务的启动、停止、重载等操作更加方便,可以编写基于 CentOS 7.3 的
Nginx 服务控制文件使用 systemctl 工具来进行管理,CentOS7.3 系统的管理习惯。
[root@localhost ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx //描述
After=network.target //描述服务类别
[Service]
Type=forking //后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid //PID 文件位置
ExecStart=/usr/local/nginx/sbin/nginx //启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID //根据 PID 重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID //根据 PID 终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service. 这样一来,就可以 systemctl 命令来启动、停止、重启、重载 Nginx 服务器了,方法是在执行时添加相应的 start、stop、restart、reload 参数。
配置文件 nginx.conf
在 Nginx 服务器的主配置文件/usr/local/nginx/conf/nginx.conf 中,包括全局配置、
I/O 事件配置和 HTTP 配置这三大块内容,配置语句的格式为“关键字 值;”(末尾以分号
表示结束),以“#”开始的部分表示注释。
1.全局配置
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括 Nginx 服务的运行用
户、工作进程数、错误日志、PID 存放位置等基本设置。
#user nobody; //运行用户
worker_processes 1; //工作进程数量
#error_log logs/error.log; //错误日志文件的位置
#pid logs/nginx.pid; //PID 文件的位置
上述配置中,worker_processes 表示工作进程的数量。若服务器有多块 CPU 或者使用
多核处理器,可以参考 CPU 核心总数来指定工作进程数,如设为 8;如果网站访问量需求并
不大,一般设为 1 就够用了。其他三项配置均已有注释,表示采用默认设置,例如,Nginx
的运行用户实际是编译时指定的 nginx,若编译时未指定则默认为 nobody。
2.I/O 事件配置
使用“events { }” 界定标记,用来指定 Nginx 进程的 I/O 响应模型、每个进程的连
接数等设置。对于 2.6 及以上版本的内核,建议使用 epoll 模型以提高性能;每个进程的连
接数应根据实际需要来定,一般在 10 000 以下(默认为 1024)。
events {
use epoll; //使用 epoll 模型
worker_connections 4096; //每进程处理 4096 个连接
}
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接
数已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的
性能表现。
3.HTTP 配置
使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连
接保持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都
包含在子界定标记“server { }”内。
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteu?ser[time_local] “$request” ’
'$status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodyb?ytess?ent"http_referer" ’
‘“
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpu?sera?gent""http_x_forwarded_for”’;
access_log logs/access.log main; //访问日志位置
sendfile on; //支持文件发送(下载)
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; //连接保持超时
#gzip on;
server { //Web 服务的监听配置
listen 80; //监听地址及端口
server_name ? ?www.bt.com??; //网站名称(FQDN)
charset utf-8; //网页的默认字符集
location / { //根目录配置
root html; //网站根目录的位置
index index.html index.php; //默认首页(索引页)
}
error_page 500 502 503 504 /50x.html; //内部错误的反馈页面
location = /50x.html { //错误页面配置
root html;
}
}
}
上述配置中,listen 语句允许同时限定 IP 地址,采用“IP 地址:端口”形式;root 语
句用来设置特定访问位置(如“location /”表示根目录)的网页文档路径,默认为 Nginx
安装目录下的 html/子目录,根据需要可改为/var/www/html 等其他路径。
访问状态统计
Nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况,配置
编译参数时可添加–with-http_stub_status_module 来启用此模块支持,可以使用命令
/usr/local/nginx/sbin/nginx –V 查看已安装的Nginx是否包含HTTP_STUB_STATUS模块。
要使用 Nginx 的状态统计功能,除了启用内建模块以外,还需要修改 nginx.conf 配置
文件,指定访问位置并添加 stub_status 配置代码。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf …… //省略部分信息
http {…… //省略部分信息
server {
listen 80;
server_name ? ?www.bt.com??;
charset utf-8;
location / {
root html;
index index.html index.php;
}
location /status { //访问位置为/status
stub_status on; //打开状态统计功能
access_log off; //关闭此位置的日志记录
}
}
}
[root@localhost ~]# systemctl restart nginx 新的配置生效以后,在浏览器中访问 Nginx 服务器的/status 网站位置,可以看到当前的状态统计信息,其中“,Active connections”表示当前的活动连接数(2);而“server accepts handled requests”表示已经处理的连接信息,三个数字依次表示已
处理的连接数(2)、成功的 TCP 握手次数(2)、已处理的请求数(14)。
桥接模式
连接到以太网
查看地址
测试ping ? ?www.baidu.com??
使用远程连接做如下实验:
关闭防火墙
systemctl stop firewalld
setenforce 0
sestatus
安装服务
yum install gc - gcc+ -y
yum -y install \
pcre-devel \
zlib-devel
新建用户
useradd -M -s /sbin/nologin nginx
上传压缩包 解压 切换目录
tar xzvf nginx-1.13.7.tar.gz -C /usr/src/
安装服务
./configure \
–prefix=/usr/local/nginx \
–user=nginx \
–group=nginx \
–with-http_stub_status_module
编译安装
make && make install
软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t //配置文件语法检查
nginx //启动服务
-------制作管理角本--------
vi /etc/init.d/nginx
#!/bin/bash
chkconfig: 35 99 20
description: Nginx Service Control Script
PROG=“/usr/local/nginx/sbin/nginx”
PIDF=“/usr/local/nginx/logs/nginx.pid”
case “$1” in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0
{start|stop|restart|reload}"
exit 1
esac
exit 0
修改权限 使Nginx生效
chmod +x /etc/init.d/nginx
chkconfig –add nginx
vi /usr/local/nginx/conf/nginx.conf
解决上图出现的问题
ulimit -n 65500//查看和更改系统本地打开资源数
ulimit -n 65500 >> /etc/rc.local
—配置统计功能----
vi /usr/local/nginx/conf/nginx.conf
location
-
/status {
stub_status on;
access_log off;
} //在server 模块里的error_page 上面增加
service nginx reload
cat /usr/local/nginx/logs/access.log
访问http://192.168.0.100/
访问http://192.168.0.100/status/
-----以下配置nginx的验证功能—
yum install httpd-tools -y
安装服务
htpasswd -c /usr/local/nginx/passwd.db jack
添加账户和密码 用户为jack 密码为1
chmod 400 /usr/local/nginx/passwd.db
修改权限 只有主人可以读取
切换目录
cd /usr/local/nginx/
修改主人的权限
chown nginx passwd.db
查看
vi /usr/local/nginx/conf/nginx.conf
找到这个位置
location / {
root html;
index index.html index.htm;
allow 192.168.0.0/24; 修改为本地虚拟机网段的地址
deny all;
auth_basic "secret";
auth_basic_user_file
/usr/local/nginx/passwd.db;
}
重启服务
systemctl restart nginx
------以下配置虚拟主机功能-------
—基于域名----
编辑配置文件
新建
mkdir extra
vi /usr/local/nginx/conf/nginx.conf
将下面命令插入
server {
listen 80;
server_name ? ?www.bt.com??;
charset utf-8;
access_log logs/bt.access.log main;
location / {
root /var/www/bt;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
server {
listen 80;
server_name ? ?www.bc.com??;
charset utf-8;
access_log logs/bc.access.log main;
location / {
root /var/www/bc;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
解决问题
切换目录查看
复制目录到当前目录
cp …/vhost.conf ./
编辑配置文件
vi /usr/local/nginx/conf/nginx.conf
删除和上图对比
编辑配置文件
添加命令 include extra/vhost.conf;
切换目录
cd /usr/local/nginx/conf/
编辑配置文件 添加dns
vim /etc/hosts
-------基于IP的-----
listen 192.168.80.193:80;
—基于端口的-----
listen 192.168.80.193:8080;
|