Nginx服务

一、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. 缓存服务

1.3 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/目录下修改这个配置文件

2.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

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

2.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模块的内容见下文
    }
}

2.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;表示支持中文

2.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),默认返回html 下的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要看情况使用。

三、实验

3.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 :表示有连接处于空闲状态,等待新的请求

3.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的服务
    

3.3 独立文件配置server模块

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值