Nginx 网站服务

  • Post author:
  • Post category:其他



目录


引言


一、Nginx 概述


1.什么是 Nginx


2.Nginx 特点


3.Nginx 应用场景


二、Nginx 服务基础


1. 编译安装 Nginx


1.1 布置环境


1.2 安装依赖包


1.3 编译安装


2. Nginx 的运行控制


2.1 检查配置文件


2.2 启动、停止 Nginx


2.3 添加 Nginx 系统服务


3. 配置文件 nginx.conf


3.1 全局配置


3.2 I/O 事件配置


3.3 HTTP 配置


三、Nginx 访问控制


1. 访问状态统计


1.1 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置代码(修改之前进行备份)


1.2 改完以后重启 nginx 服务,重启nginx服务,在浏览器中访问测试​编辑


1.3 结合awk来写shell脚本,如果链接数过高报警


2. 基于授权密码的访问控制


2.1  生成用户密码认证文件,


2.2 修改主配置文件 nginx.conf ,添加相应认证配置项


2.3 重启服务,浏览器访问http://192.168.10.19


3. 基于客户端的访问控制


3.1 修改配置文件


3.2 重启服务,使用前面设置允许的机器访问测试


4. 基于域名的Nginx虚拟主机


4.1 为虚拟主机提供域名解析


4.2 为虚拟主机准备网页文档


4.3 修改 Nginx 的配置文件


4.4 重启服务,访问测试


5.基于IP的 Nginx 虚拟主机


5.1 创建临时虚拟网卡


5.2 修改 Nginx 配置文件


5.3 重启服务,访问测试


6.基于端口的Nginx虚拟主机


6.1 修改 Nginx 配置文件中的监听端口


6.2 重启服务,访问测试


总结


引言

Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

一、Nginx 概述





1.什么是 Nginx

没有听过 Nginx?那么你一定听过 Apache 吧!Nginx 同 Apache 一样都是一种 Web 服务器,通过 HTTP 协议提供各种网络服务。

2.Nginx 特点

(1)Nginx 具有很高的稳定性

(2)系统资源消耗低,相比于 Apache 更加轻量级

(3)Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率

(4)Nginx支持热部署。它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

(5)对 HTTP 并发连接的处理能力高,单台服务器可支持30000 ~ 50000个并发请求,在实际生产环境中约20000~30000并发连接数。

NG并发连接能力受以下二个因素的影响:
1.CPU个数
2.本地物理服务器系统的最大文件打开数

3.Nginx 应用场景

  • 静态服务器(图片,视频服务)
  • 动态服务
  • 反向代理,负载均衡
  • 缓存服务

二、Nginx 服务基础





1. 编译安装 Nginx





1.1 布置环境

[root@localhost /opt]#rz -E                 						 #上传安装包
rz waiting to receive.
[root@localhost /opt]#ls
nginx-1.12.2.tar.gz  rh
[root@localhost /opt]#systemctl stop firewalld.service            #关闭防火墙及开机自启功能
[root@localhost /opt]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@localhost /opt]#systemctl disable firewalld.service
[root@localhost /opt]#setenforce 0                          #关闭增强
setenforce: SELinux is disabled
[root@localhost /opt]#vim /etc/resolv.conf               		#定义DNS服务器的地址
[root@localhost /opt]#cat /etc/resolv.conf 
nameserver 114.114.114.114
[root@localhost /opt]#ping baidu.com                             #确保网络连通
PING baidu.com (220.181.38.251) 56(84) bytes of data.
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=1 ttl=128 time=32.0 ms
......

1.2 安装依赖包

Nginx 的配置及运行需要 pcre、zlib 等软件包的支持

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

1.3 编译安装

[root@localhost /opt]#tar zxvf nginx-1.12.2.tar.gz 
[root@localhost /opt]#ls
nginx-1.12.2.tar.gz      nginx-1.12.2            rh
[root@localhost /opt]#cd nginx-1.12.2/
[root@localhost /opt/nginx-1.12.2]#ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@localhost /opt/nginx-1.12.2]#./configure \
> --prefix=/usr/local/nginx \ 				 #指定nginx安装路径
> --user=nginx \							 #指定用户名
> --group=nginx \							 #指定组名
> --with-http_stub_status_module			 #启用 httpd_stub_status_module 模块以支持状态统计


./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module


[root@localhost /opt/nginx-1.12.2]#make -j3 && make install

为了使 Nginx 服务器的运行更方便,可以为主程序 nginx 创建链接文件,以便管理员直接执行 “nginx” 命令就可以调用 Nginx 的主程序

[root@localhost /opt/nginx-1.12.2]#ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost /opt/nginx-1.12.2]#ls -l /usr/local/sbin/nginx 
lrwxrwxrwx. 1 root root 27 5月  19 16:46 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

创建运行用户、组

#Nginx 服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确的控制其访问权限,增加灵活性、降低安全风险
[root@localhost /opt/nginx-1.12.2]#useradd -M -s /sbin/nologin nginx
#创建一个名为nginx的用户,不建立宿主目录,禁止登录到Shell环境中

2. Nginx 的运行控制





2.1 检查配置文件

[root@nginx /opt/nginx-1.12.2]#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
#若要检查其他位置的配置文件,可以使用"-c"选项来指定路径

2.2 启动、停止 Nginx

直接运行 Nginx 即可启动 Nginx 服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加”-c 配置文件路径”选项来指定路径。

这里需要注意,如果服务器中已装有 httpd 等其他 Web 服务软件,应修改端口或停用、卸载,以免造成冲突。

nginx                                        #启动服务              

在浏览器中访问此 Web 服务,可以确认 Nginx 服务是否正常运行,默认页面为 “welcome to nginx!”

[root@localhost /opt/nginx-1.12.2]#yum install -y elinks.x86_64
[root@localhost /opt/nginx-1.12.2]#elinks http://nginx

查看 nginx 的 PID 号

[root@localhost /opt/nginx-1.12.2]#cat /usr/local/nginx/logs/nginx.pid 
[root@localhost /opt/nginx-1.12.2]#netstat -antp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15693/nginx: maste

通过 kill 命令发送 HUP 信息表示重载配置,发送 QUIT 信息表示退出进程,发送 kill 信息表示杀死进程。当Nginx 进程运行时,PID 号默认存放在 logs/ 目录下得 nginx.pid 文件中,因此若使用 kill 命令,可以根据 PID 号进行控制

kill -3 <PID号>
kill -s QUIT <PID号>      					 #-s选项表示指定信号种类
killall -3 nginx
killall -s QUIT nginx                        #等同于-3

#重载配置
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx                         #等同于-1


注意,这里谨慎使用 kill -9 选项,可能导致数据丢失,而 kill -3 并不会影响程序运行。

2.3 添加 Nginx 系统服务


方法 1

[root@localhost /opt/nginx-1.12.2]#vim /etc/init.d/nginx


vim /etc/init.d/nginx

#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script

COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"

case "$1" in
start)
        $COM
        ;;
stop)
        kill -s QUIT $(cat $PID)
        ;;
restart)
        $0 stop
        $0 start
        ;;
reload)
        kill -s HUP $(cat $PID)
        ;;
*)
        echo "Usage: $0 {start|stop|restart|reload}"
        exit 1
esac
exit 0

#chkcofig – 99 20 “-” 表示不启用开机启动管理 (同时 若不加“#”, chkconfig add nginx 会加载不到配置)

COM=”/usr/local/nginx/sbin/nginx” 表示nginx命令程序文件位置

PID=”/usr/local/nginx/logs/nginx.pid” 表示pid号存放目录

chmod +x /etc/init.d/nginx             		#添加权限
chkconfig --add nginx         				#添加为系统服务
systemctl stop nginx						#关闭服务器
systemctl start nginx						#开启服务器
[root@localhost /opt/nginx-1.12.2]#netstat -antp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15693/nginx: master 
[root@localhost /opt/nginx-1.12.2]#systemctl status nginx.service 
● nginx.service - SYSV: Nginx Service Control Script
   Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
   Active: active (exited) since 四 2021-09-30 17:27:36 CST; 54s ago
......


方法2

[root@localhost /opt/nginx-1.12.2]#cd /usr/lib/systemd/system/
[root@localhost /usr/lib/systemd/system]#ls            #里面都是启动脚本
abrt-ccpp.service                        plymouth-poweroff.service
abrtd.service                            plymouth-quit.service
abrt-oops.service                        plymouth-quit-wait.service
abrt-pstoreoops.service                  plymouth-read-write.service
.......
[root@localhost /usr/lib/systemd/system]#vim nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=£orking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/ki11 -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]	
Description=nginx										#描述
After=network.target									#描述服务类别
[Service]
Type=forking											#后台运行类型
PIDFile =/usr/local/nginx/logs/nginx.pid				#PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx					#启动服务
ExecrReload=/bin/kill -s HUP $MAINPID					#根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID					#根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target								#启动级别

chmod 754 /lib/systemd/system/nginx.service				#设置754权限是一种安全优化
systemctl start nginx.service
systemctl enable nginx.service

systemctl daemon-reload  								#加载新的 unit 配置文件
watch -n 2 systemctl status nginx network               #-n每2秒刷新一下服务运行状态
watch -n 2 systemctl status                             #查看多个服务状态


在浏览器可以查看服务是否运行

3. 配置文件 nginx.conf

在 Nginx 服务器的主配置文件 /usr/local/nginx/conf/nginx.conf 中,包括全局配置、I/O 事件配置和 HTTP 配置这三大块内容,配置语句的格式为 “关键字 值 ;”(末尾以分号表示结束),以“#”开始的部分表示注释

#作为一名合格的运维,需要有好的备份的习惯!!!
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

3.1 全局配置

由各种配置语句组成,不使用特定的界定标记。全局配置部分包括 Nginx 服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置

[root@localhost /usr/local/nginx/conf]#cat nginx.conf

#user  nobody;                              #运行用户
worker_processes  1;						#工作进程数量
#error_log  logs/error.log;					#错误日志存放位置
#error_log  logs/error.log  notice;			
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;                 #PID文件的位置

3.2 I/O 事件配置

(1)使用 “events { } ” 界定标记,用来指定 Nginx 进程的 I/O 相应模型,每个进程的连接数等设置(默认为1024)

events {
    worker_connections  1024;
}

(2)

linux 系统对文件打开的数量有最大的限制,通常设置为1024,这个数值很容易会达到,从而造成系统程序或者系统的瓶颈

[root@localhost /usr/local/nginx/conf]#ulimit -a               #查看当前进程可以打开的最大文件数
pending signals                 (-i) 14984
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
......
[root@localhost /usr/local/nginx/conf]#ulimit -n              #修改当前进程可以打开文件的最大数量
1024
[root@nginx /usr/local/nginx/conf]#cat /proc/sys/fs/file-max      #查看当前系统的最大文件数
378925

#通过命令ulimit -n 65535可以进行更改
[root@localhost /usr/local/nginx/conf]#ulimit -a 65535
[root@localhost /usr/local/nginx/conf]#ulimit -n
65535

3.3 HTTP 配置

(1)使用 “http { } “界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在子界定标记 “server { } ” 内

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;					#访问日志位置

    sendfile        on;									#支持文件发送(下载)
    #tcp_nopush     on;    								#此选项允许或禁止使用socket的TCP_CORK的选项( 发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用

    #keepalive_timeout  0;								#连接保持超时时间,单位为秒
    keepalive_timeout  65;

    #gzip  on;											#压缩模块,on 表示开启

    server {											#web服务相关配置
        listen       80;								#默认监听的端口
        server_name  localhost;							#站点域名   需改为www.gkd.com


        #charset koi8-r;								#字符集支持(修改为中文UTF-8)

        #access_log  logs/host.access.log  main;		#此web服务的主访问日志

        location / {									#根目录配置
            root   html;								#网站根目录的位置(/usr/local/nginx/html)
            index  index.html index.htm;				#默认首页(索引页)
        }

        #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   html;
        }


(2)配置本地映射

[root@localhost /usr/local/nginx/conf]#vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.19 www.gkd.com                      #这里格式必不能错,不然无法访问
或
echo "192.168.10.19 www.gkd.com" >> /etc/hosts

[root@localhost /usr/local/nginx/conf]#curl www.gkd.com    #curl可以测试一台服务器是否可以到达一个网站
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@localhost /usr/local/nginx/conf]#cd /usr/local/nginx/html/
[root@localhost /usr/local/nginx/html]#ls
50x.html  index.html
[root@localhost /usr/local/nginx/html]#mkdir test
[root@localhost /usr/local/nginx/html]#cd test/
[root@localhost /usr/local/nginx/html/test]#vim index.html 

hello world!
[root@localhost /usr/local/nginx/html]#systemctl stop nginx.service 
[root@localhost /usr/local/nginx/html]#systemctl start nginx.service

三、Nginx 访问控制

1. 访问状态统计

Nginx内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前得 Web 访问情况,配置编译参数时可添加

–with-http_stup_status_dodule 来启用此模块支持。

可使用命令 /usr/local/nginx/sbin/nginx -V 来查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块。

要使用 Nginx 的状本统计功能,除了启用内建模块以外,还需要修改 nginx.conf 配置文件,指定访问位置并添加stub_status 配置代码。

1.1 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置代码(修改之前进行备份)

#先拷贝一份配置文件
[root@localhost conf]#cp /usr/local/nginx/conf/nginx.conf nginx.conf.bak
 
#  修改 nginx.conf 配置文件
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
 
events {
    use epoll;
    worker_connections  1024;
}
 
    server {
        listen       80;
        server_name  localhost;
 
 
        charset utf-8;
      location / {
            root   html;
            index  index.html index.htm;
        }
 
        location /status {  ##访问位置为/status
            stub_status on;  ##打开状态统计功能
            access_log off;  ##关闭此位置的日志记录
        }

#改完以后检查语句是否正确
nginx -t

1.2 改完以后重启 nginx 服务,重启nginx服务,在浏览器中访问测试

”Active connections“表示当前的活动连接数
”server accepts handled requests“表示已经处理的连接信息,三个数字依次表示:
已处理的连接数、成功的TCP握手次数、己处理的请求数

1.3 结合awk来写shell脚本,如果链接数过高报警

#/bin/bash
a=$(curl 192.168.10.19/status)
b=$(echo $a|awk '{print $3}')
if [ $b -ge 1000 ]
then 
echo "连接数过高"|mail -s test 2354838711@qq.com
else
echo "运行良好"
fi

2. 基于授权密码的访问控制



① 生成用户密码认证文件

② 修改主配置文件相对应目录,添加认证配置项

③ 重启服务,访问测试

2.1  生成用户密码认证文件,

如果没有该命令,可使用 yum 安装 httpd-tools 软件包

修改密码文件的权限为400,将所有者改为 nignx ,设置 nginx 的运行用户有读取的权限

[root@localhost /opt]#yum install -y httpd-tools.x86_64 

#在/usr/local/nginx/目录下生成passwd.db文件,用户名为 zhangsan
[root@localhost /opt]#htpasswd -c /usr/local/nginx/passwd.db zhangsan
New password:                                 #输入二次密码
Re-type new password: 
Adding password for user test				  #生成用户和密码的密文
[root@nginx /opt]#chown nginx /usr/local/nginx/passwd.db 
[root@nginx /opt]#chmod 400 /usr/local/nginx/passwd.db 

2.2 修改主配置文件 nginx.conf ,添加相应认证配置项

[root@localhost /usr/local/nginx/conf]#vim nginx.conf
......

         location / {
         auth_basic "secret";             #在主页配置项中添加认证
         auth_basic_user_file /usr/local/nginx/passwd.db; 
             root   html;
             index  index.html index.htm;
         }

2.3 重启服务,浏览器访问http://192.168.10.19

[root@localhost /usr/local/nginx/conf]#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
[root@localhost /usr/local/nginx/conf]#systemctl restart nginx 


3.

基于客户端的访问控制

基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。

规则如下:

① deny IP/IP段:拒绝某个 IP 或 IP 段的客户端访问

② allow IP/IP段:允许某个 IP 或 IP 段的客户端访问

③ 规则从上往下执行,如匹配则停止,不再往下匹配

3.1 修改配置文件

[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
  location / {
            #auth_basic "secret";
            #auth_basic_user_file /usr/local/nginx/passwd.db;
            allow 192.168.10.19;                      ###客户端IP
            deny all;
            root   html;
            index  index.html index.htm;
        }

3.2 重启服务,使用前面设置允许的机器访问测试

4. 基于域名的Nginx虚拟主机

利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一 组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功 能。跟 Apache 一样,Nginx 也可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、 基于域名的虚拟主机、基于端口的虚拟主机。 使用 Nginx 搭建虚拟主机服务器时,每个虚拟 Web 站点拥有独立的“server{}”配置段, 各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。

4.1

为虚拟主机提供域名解析

4.2

为虚拟主机准备网页文档

4.3

修改 Nginx 的配置文件

    server {
        listen       80;
        server_name  www.zhangsan.com;
        charset utf-8;
        access_log  logs/host.access.log;
        location / {
            root   /usr/local/nginx/html/zhangsan;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

    server {
        listen       80;
        server_name  www.lisi.com;
        charset utf-8;
        access_log  logs/host.access.log;
        location / {
            root   /usr/local/nginx/html/lisi;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

4.4 重启服务,访问测试


修改IP等信息


修改C:\Windows\System32\drivers\etc\hosts配置文件


访问测试

5.基于IP的 Nginx 虚拟主机

5.1

创建临时虚拟网卡

5.2

修改 Nginx 配置文件

5.3 重启服务,访问测试


6.基于端口的Nginx虚拟主机

6.1

修改 Nginx 配置文件中的监听端口

6.2 重启服务,访问测试


总结

  • Nginx 内建的访问统计功能由 stub_status 模块提供,需要在编译时启用 “- -with-http_stub_status_module” 选项
  • Nginx 页面访问安全有基于授权和基于客户端两种方式
  • Nginx 虚拟主机搭建可基于 IP、域名和端口



版权声明:本文为weixin_67582338原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。