7.2Nginx服务

一、web服务器

一般提到web服务器,就是指httpd或Nginx服务。

httpd就是Apache,在国内用的较少。

Nginx在国内使用的比较广泛。

1.1 Nginx

Nginx是开源的,是一款高性能,轻量级的web服务软件。

Nginx稳定性高,而且版本迭代比较快。目前主流的是22、24版本。修复bug比较快,安全性好。

Nginx消耗系统资源很低。http的请求并发连接,单台服务器可以支持30000-50000个并发请求(系统资源全部分配给Nginx使用的情况下)。单个节点的Nginx分配的资源一般支持10000-20000个并发。

1.2 Nginx的功能

Nginx的功能介绍

  1. 静态文件服务 :静态页面,可以直接提供静态文件服务,html css jsp等。处理静态页面的响应速度很快,效率很高。
  2. 代理功能 :正向代理,反向代理。可以实现负载均衡,高可用和故障转移。
  3. 动态内容处理 :Nginx并不能直接处理动态请求,可以通过中间件(如php Tomcat)把动态请求转发给后端服务器。
  4. 支持http和https。
  5. 可以实现重定向。
  6. 虚拟主机 :一个Nginx可以配置多个域名和站点。
  7. Nginx自带缓存机制。
  8. 性能可扩展 :处理能力可以随时调整。

Nginx的应用场景

  1. 静态页面
  2. 转发动态请求
  3. 反向代理、负载均衡
  4. 缓存服务

二、Nginx源码安装

准备:关闭防火墙及安全机制,准备接收文件

systemctl stop firewalld		#关闭防火墙
setenforce 0					#关闭安全机制
rz -E							#接收文件

第一步:把源码包放入到系统之中。

​ 使用ssh远程终端的可以直接从本机拖进虚拟机

第二步:安装编译过程中需要的依赖环境。

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

第三步:创建Nginx程序运行需要的用户和组

useradd -M -s /sbin/nologin nginx	#不创建家目录,指定/sbin/nologin

第四步:编译安装

  1. 解压源码包
tar -xf nginx-1.22.0.tar.gz
cd nginx-1.22.0/
  1. 开始配置,配置程序的安装路径,安装基于程序需要的安装组件
./configure --prefix=/usr/local/nginx \	#配置安装路径
--user=nginx \							#配置用户
--group=nginx \							#配置组
--with-http_ssl_module \				#支持https的加密功能ssl/tsl
--with-http_v2_module \					#支持http2.0协议
--with-http_realip_module \				#支持Nginx获取客户端的真实IP地址
--with-http_stub_status_module \		#支持Nginx获取访问状态信息的功能
--with-http_gzip_static_module \		#支持页面压缩文本
--with-pcre \							#支持pcre库
--with-stream \							#支持4层代理的模块
--with-stream_ssl_module \				#支持对tcp连接的加密
--with-stream_realip_module				#持从代理协议中获取客户端的真实ip地址
#无注释的命令
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
  1. 编译和安装
make -j 4 && make install	#第一个make:编译;第二个make install:安装
#make -j 4 启动4个CPU进行处理(加快安装速度)

第五步:后续配置,设置权限和系统管理配置

  1. 配置权限
cd /usr/local 
chown -R nginx.nginx nginx		#对/usr/local目录下nginx目录更改所属
  1. /usr/local/nginx目录下的四个目录的解释

    conf :配置文件目录,主配置文件nginx.conf

    html :工作目录:50x.html默认的访问操作打开的页面,index.html

    logs :日志目录:访问日志、报错日志

    sbin :二进制启动脚本nginx

  2. 做一个软连接,让系统能够识别nginx的指令

ln -s  /usr/local/nginx/sbin/nginx /usr/sbin (/usr/bin也行)
  1. 设置系统控制,系统能够对nginx这个软件的运行状态进行控制。
vim /lib/systemd/system/nginx.service
#对 nginx.service 内容进行修改如下
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
#表示支持dns解析以及该软件依赖于网络。
Wants=network-online.target
#先启动网络服务,才能启动nginx
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
#支持多用户模
  1. 修改nginx的配置文件,把pid文件的位置指向到设置的位置
cd  /usr/local/nginx
mkdir run
chown -R nginx.nginx /usr/local/nginx/run	#递归修改run目录所属
cd /usr/local/nginx/conf
vim nginx.conf				#编辑要修改的配置文件

​ 修改 nginx.conf 文件的内容中 pid 指向的位置

pid /usr/local/nginx/run/nginx.pid;

​ 修改完后

nginx -t					#检测nginx.conf当中的语法是否正确,提示OK则正常
systemctl daemon-reload		#重新加载systemd守护进程
systemctl restart nginx		#重启nginx服务
nginx -v					#查看nginx版本号
systemctl stop nginx		#停止nginx服务

​ 在web页面访问虚拟机IP地址,可以看到“welcome to nginx”

三、Nginx介绍

Nginx的常用命令

nginx -t :检测配置文件的语法是否正确

nginx -v :显示Nginx的版本

nginx -V :显示Nginx的版本和配置项

nginx -s :signal,信号:

  • stop :关闭Nginx
  • reload :重新加载Nginx,如果更改了配置文件,nginx -s reload 无需重启服务。

三、Nginx的配置

nginx.conf配置文件,在/usr/local/nginx/conf/目录下修改这个配置文件

3.1 全局模块

#user nobody;
#默认程序用户就是Nginx,这里可以保持注释无需修改
worker_processes	1;		#1位置的数字可自定义

工作进程组,一般设置为系统内核数量的两倍,但一般不超过8个,超过8个性能反而会下降

pid ......
#pid文件的位置
events {
	worker_connections 1024;
}

events模块 :决定了Nginx能够处理的连接数,连接数和worker_processes的数值相乘。

处理进程的过程必然涉及配置文件和展示以页面,也就是涉及打开文件的数量。Linux默认打开的文件数就是1024个。如果不修改Linux打开文件数量的默认配置,那这里设置的再高也无效。

注:修改默认打开的文件数的方法

vim /etc/security/limits.conf
#添加以下行
* soft nproc 65535
#能打开的进程最大数量的软限制为65535,65535是最大数
* hard nproc 65535
* soft nofile
#进程打开文件数的最大值为65535
* hard nofile

这个配置要生效,只能重启系统,所以这是系统初始化时要做好的配置。

3.2 http 模块

http模块 :转发和处理http请求,设置代理(正向代理和反向代理),缓存,定义日志格式,重定向配置。
http模块当中,包含:
server模块 :http模块里面可以有多个server模块
server模块中包含:
location模块
server模块当中可以有多个location模块

http {
    include       mime.types;
    #文件扩展名与问价类型的映射表。Nginx能够打开的文件和支持的文件类型
    default_type  application/octet-stream;
	#默认支持的文件类型:.html .jsp .js .php
    #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访问日志的格式和error.log错误日志的格式
    
    #access_log  logs/access.log  main;
	#默认的访问日志的存放路径
	
    sendfile        on;
    #支持文件发送或者下载
    #tcp_nopush     on;
	#默认就是异步非阻塞模式
	
    #keepalive_timeout  0;
    keepalive_timeout  65;
	#连接保持的时间,默认65秒,单位是秒
	
    #gzip  on;
	#gzip模块,设置是否开启页面压缩
	
    #server:开启web服务的模块
    server {
    #server模块的内容见下文
    }
}

3.3 server模块

server模块包含location模块,可以包含多个location模块

server模块内容的解释:

 server {
        listen       80;
        #Nginx默认监听端口
        server_name  localhost;
		#配置站点的域名
        #charset koi8-r;
		#网页的默认字符集
        #access_log  logs/host.access.log  main;
		#server默认访问日志的地址,在/usr/local/nginx/logs下
		
		#location模块:网页匹配的工作目录的地址和支持打开页面的文件类型
        location / {
        # / 表示对家目录下所有的请求进行处理
            root   html;
            #root表示Nginx工作目录的家目录,即/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;
        }
    }

其中,可以用charset uft-8;表示支持中文

3.4 location模块

location模块:配置打开网页匹配的工作目录的地址支持打开页面的文件类型

#location模块:网页匹配的工作目录的地址和支持打开页面的文件类型
location / {
# location后面的 / 表示对家目录下所有的请求进行处理
root   html;
#root表示Nginx工作目录的家目录,即/usr/local/nginx/html
index  index.html index.htm;
}

解释:

root 表示 Nginx工作目录的家目录,默认从Nginx的根目录(安装路径)/usr/local/nginx出发;

所以root html;就表示工作目录的家目录为Nginx根目录下的html

location 后面跟的路径表示URL的匹配规则,上文中后面跟的是 /,表示对访问家目录(工作目录)下的所有请求进行处理,不指定URI时(比如访问20.0.0.10,而不是20.0.0.10/test1),默认返回index.html

location 后面跟的路径不是/时,比如:

 location /ykw {
            root   /var/www/html;
            index  index.html index.htm;
        }

此时定义工作目录的家目录为 /var/www/html

location /ykw表示可以对家目录下的ykw这个目录进行匹配,如IP地址为20.0.0.10

curl 20.0.0.10/ykw

就会返回/var/www/html/ykw这个目录下的index.html

如果这个目录下没有可返回的文件,Nginx会返回状态码404

此外,alias也可以指定家目录,指定的模式和root略有区别:

  • root的匹配模式,拼接root后的路径和location后的路径
  • alias的匹配模式,匹配Nginx的工作目录,路径是绝对路径
  • alias只能写在http模块当中server模块的location模块当中
  • root可以写在server模块,也可以在http,也可以在location中
  • alias匹配工作目录,不能使用重定向功能

工作中一般会使用root来指定家目录,alias要看情况使用。

四、Nginx服务的优化

4.1 隐藏版本号

方法一 :在http模块中添加行

#隐藏版本号
server_tokens off;

方法二 :修改版本信息

进入源码安装包

cd /安装包根目录/src/core
vim nginx.h
解注释以下行并修改
define NGINX_VERSION		"Don't you guess!"
difine NGINX_VER			"Gotcha!/" NGINX_VERSION 

回到安装包根目录,重新编译安装

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 4 && make install

五、实验

5.1 实验一:统计Nginx访问状态

vim nginx.conf
location /status {
	stub_status on;
	#打开状态统计的功能
	access.log off;
	#关闭status的访问日志
}
Active connections: 1
#当前活动的连接数
server accepts handled requests
#服务端已经处理的连接数
 1 1 1
Reading: 0 writing: 1 waiting: 0

三个数子从左到右:已经处理的连接数,成功的tcp握手次数(连接数),已经处理的请求数

reading :表示服务端正在从客户端读取请求的数据

writing :表示服务端正在将响应数据发送给客户端

waiting :表示有连接处于空闲状态,等待新的请求

5.2 实验二:对访问进行控制

  1. 基于密码的授权进行访问控制

    yum -y install httpd-tools
    #htpasswd的工具,要先安装
    
    htpasswd -c /usr/local/nginx/passwd.db ykw
    输入两次密码
    #设置登录Nginx的用户 ykw 和 密码
    chown nginx passwd.db
    chmod 400 passwd.db
    #passwd.db 的权限为只读
    
    vim nginx.conf
    #添加/修改以下内容
    location / {
    	root html;
    	index index.html;
    	auth_basic "secret";
    	#开启用户密码验证
    	auth_basic_user_file /usr/local/nginx/passwd.db;
    	#使用指定的加密文件
    }
    
  2. 基于客户端的访问控制,根据IP地址进行控制

    vim nginx.conf
    #添加/修改以下内容
    location / {
    	root html;
    	index index.html;
    	#添加一个控制规则
    	deny 20.0.0.20;
    	#也可以屏蔽网段,如 deny 20.0.0.0/24;
    	#allow all;
    	#allow 可以不写,默认就是allow
    }
    
  3. 基于域名的访问控制

    vim nginx.conf
    #添加/修改以下内容
     server {
            listen       80;
            server_name  www.ykw.com;
            #定义域名为www.ykw.com
            charset utf-8;
            #支持中文
            access_log  logs/www.ykw.com.access.log;
    		#server默认访问日志的地址
    		
    		#网页匹配的工作目录的地址和支持打开页面的文件类型
            location / {
                root   /var/www/html/ykw;
                index  index.html index.htm;
            }
     }
    
     server {
            listen       80;
            server_name  www.test1.com;
            charset utf-8;
            access_log  logs/www.test1.com.access.log;
            location / {
                root   /var/www/html/test1;
                index  index.html index.htm;
            }
     }
    

    编辑默认访问页面

    mkdir -p /var/www/html/xxx
    echo "Show me the money! " > /var/www/html/ykw/index.html
    echo "自律使你自由!" > /var/www/html/test1/index.html
    
    

    在另一台主机test2 20.0.0.20/etc/hosts文件中作dns映射

    20.0.0.10 www.ykw.com www.test1.com
    

    test2上操作

    curl www.ykw.com
    Show me your money!
    curl www.test1.com
    自律使你自由!
    
  4. 基于IP地址的访问控制

    创建虚拟主机

    ifconfig ens33:0 20.0.0.101
    

    以3中的server为例,修改server模块中listen 后面为 IP地址:端口

     server {
            listen       20.0.0.10:80;
            server_name  www.ykw.com;
            charset utf-8;
            access_log  logs/www.ykw.com.access.log;
            location / {
                root   /var/www/html/ykw;
                index  index.html index.htm;
            }
     }
    
     server {
            listen       20.0.0.101:80;
            server_name  www.test1.com;
            charset utf-8;
            access_log  logs/www.test1.com.access.log;
            location / {
                root   /var/www/html/test1;
                index  index.html index.htm;
            }
     }
    

    test2上操作

    curl 20.0.0.10
    Show me your money!
    curl 20.0.0.101
    自律使你自由!
    
  5. 基于端口的访问控制

    修改server模块中listen 后面的端口号
    同一个IP地址可以对多个端口提供服务

     server {
            listen       20.0.0.10:80;
            server_name  www.ykw.com;
            charset utf-8;
            access_log  logs/www.ykw.com.access.log;
            location / {
                root   /var/www/html/ykw;
                index  index.html index.htm;
            }
     }
    
     server {
            listen       20.0.0.10:8080;
            server_name  www.test1.com;
            charset utf-8;
            access_log  logs/www.test1.com.access.log;
            location / {
                root   /var/www/html/test1;
                index  index.html index.htm;
            }
     }
    

    test2上操作

    curl www.test1.com
    Show me your money!
    curl www.ykw.com
    Show me your money!
    #实际上都是默认访问的20.0.0.10:80的服务
    
    curl www.ykw.com:8080
    自律使你自由!
    curl www.test1.com:8080
    自律使你自由!
    #访问的是20.0.0.10:8080的服务
    

5.3 独立文件配置server模块

把server模块的配置保存在单独的文件中

vim nginx.conf
#添加以下内容
include /usr/local/nginx/conf.d/*.conf;
#可以识别到conf.d目录下。只包含server模块的conf文件

被识别到的conf文件里只写有server模块的配置,被nginx.conf识别到以后,会自动调用nginx.conf文件中的http模块的配置。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值