nginx网站服务(一、小实验)

nginx是一款高性能而且轻量级的web服务软件,提供静态页面服务,也就是纯文本格式的文件,一般是以.html或者.htm为后缀的文件

特点:

  • 稳定性一般(bug很多,所以更新迭代也快)

  • 开源(免费),可以做二次封装(二次开发)

  • 对系统资源的消耗非常低,而且可以处理http协议(单台物理服务器可以支撑30000-50000的并发请求,工作中一般设为20000台,为了保持服务器的稳定)

nginx的功能:

  • 处理静态页面,可以直接提供静态页面的文件服务。html、图片、动画也可以。能够高效地处理并且响应静态页面的请求
  • 反向代理,通过反向代理实现负载均衡和高可用
  • 处理动态请求(非强项),nginx是把动态请求转发到后端服务器,由专门处理动态请求的服务器进行处理,然后动态请求处理完之后,还是由nginx响应给客户端
  • 支持加密的http协议(https)
  • 支持虚拟主机
  • 支持URL的重定向(页面跳转)
  • nginx自带缓存机制,可以缓存静态页面的内容,减轻后端服务器的压力
  • nginx自带日志记录,访问记录(哪些主机访问了本机的nginx服务),报错日志(访问失败的记录;配置文件的错误;nginx启动失败的记录)
  • 可以支持模块扩展,可以加载不同的模块和自定义配置
  • 低内存消耗
  • 支持热部署,可以不停机更新配置文件、升级版本

nginx在工作中的主要应用场景:

  • 静态页面服务
  • 转发动态请求
  • 反向代理,负载均衡
  • 缓存服务
  • 连接保持和会话保持

nginx的安装
  1. 安装依赖环境:
    yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
  2. 创建一个用户:
    useradd -M -s /sbin/nologin nginx

    -M 不创建家目录
    -s 指定shell

  3. 解压:
    tar -xf nginx-1.22.0.tar.gz
  4. 进入软件包目录进行安装配置:
    #指定安装位置
    ./configure --prefix=/usr/local/nginx \
    #指定用户名
    --user=nginx \
    #指定所在组 
    --group=nginx \
    #支持https协议 
    --with-http_ssl_module \
    #支持http2.0协议 
    --with-http_v2_module \
    #支持从客户端获取真实IP 
    --with-http_realip_module \
    #支持访问nginx状态信息的方法 
    --with-http_stub_status_module \
    #支持对页面进行压缩的功能
    --with-http_gzip_static_module \
    #支持pcre库 
    --with-pcre \
    #支持stream模块,可以支持四层代理 
    --with-stream \
    #支持加密传输的四层代理 
    --with-stream_ssl_module \
    #允许nginx从代理(proxy协议)的头部获取客户端的真实IP地址 
    --with-stream_realip_module

  5. 编译安装:
    make && make install
  6. 进入/usr/local/目录,把其下的nginx/目录的所属用户和所属组改变为nginx:
    cd /usr/local
    chown -R nginx:nginx nginx/

    对/usr/local/nginx/目录下的文件做一下解释:
    conf:nginx的配置文件目录,nginx.conf是主配置文件
    html:保存的是nginx的web文件,也就是工作目录
    logs:日志文件目录
    sbin:nginx的二进制启动的脚本文件

  7. 为nginx设置一个软链接,方便使用命令:
    ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
  8. 为nginx添加启动项服务:
    vim /lib/systemd/system/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
    Wants=network-online.target
    [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
  9. 为运行文件创建一个目录:
    mkdir /usr/local/nginx/run
  10. 修改nginx的配置文件:
    vim /usr/local/nginx/conf/nginx.conf

    暂时只改一个pid位置:

  11. 启动服务:
    systemctl daemon-reload
    systemctl restart nginx
  12. 在页面文件里写一点东西:
    vim /usr/local/nginx/html/index.html

    之前的内容可以全部删掉:

  13. 在浏览器输入虚拟机IP地址就可以看到写的内容了,没显示记得关防火墙:

    systemctl stop firewalld
    setenforce 0

nginx命令的用法:

  • nginx -t 检查配置文件语法和配置项是否正确
  • nginx -v 显示版本
  • nginx -V 显示版本同时显示配置项
nginx.conf配置详解:

稍微看一下,后面会经常用到

#运行用户,如果编译时没指定,默认就是nobody
#user  nobody;
#工作进程数量,一般是CPU内核数量的两倍,访问量不大的话1就足够了
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定nginx的pid文件的位置
pid        /usr/local/nginx/run/nginx.pid;

#以上为全局配置,对所有用户都生效

events {
#每个进程可以支持的并发连接数
    worker_connections  10000;
}


#可以配置代理、缓存、定义日志、虚拟主机和第三方的模块功能
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;

    #keepalive_timeout  0;
#连接保持,默认65秒
    keepalive_timeout  65;

#开启gzip的压缩模式,可以对页面进行压缩
    gzip  on;
#server就是nginx的虚拟主机模块,只能写在http模块中,不能写在全局中
    server {
#虚拟主机的监听端口
        listen       80;
#虚拟主机的域名,可以有多个,但是要用","隔开
        server_name  localhost;

#指定虚拟服务器的默认编码(网页的默认字符集)
        charset utf-8;

        #access_log  logs/host.access.log  main;

#指定虚拟主机的默认工作目录,一个server中可以有多个location
        location / {
            root   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指的是uri,这里我改成了/test
        location = /test {
#root指的是url,如果写成root /opt/html,就会去/opt/html/底下找test/下的index.html文件
#如果root html,那么就是从nginx默认位置找test/下的index.html文件
#这里也可以写alias /opt/html/就是找/opt/html/目录下的.html文件,如果想要找到/opt/html/test/下的.html文件,必须精确到/opt/html/test
            root   html;
#页面的名称
            index index.html index.htm;
        }
#底下还有,但不重要了

Linux限制了能打开的最大文件数,所以worker_connections的数量不能超过它,想要增加worker_connections的数量,必须先改vim /etc/security/limits.conf(要重启虚拟机才能生效)

配置文件的重点:

  • events模块:配置连接数
  • http模块:代理地址、日志、虚拟主机都在http
  • 一个http模块可以有多个server块,server模块只能在http模块中
  • location模块只能写在server模块当中,一个server模块可以有多个location(匹配工作目录)
  • root和alias指定工作目录的区别:root是一个拼接的过程;alias是精确匹配,root可以在server块中,但是alias只能在location中,alias匹配的uri如果是/则必须用/结尾,root不需要

实验一:访问状态统计
  1. 先使用命令nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块
  2. 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
  3. 重启服务:
    systemctl restart nginx
  4. 在浏览器中访问 IP/status

    Active connections :表示当前的活动连接数;
    server accepts handled requests:表示已经处理的连接信息,
    三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。
    Reading: 当前正在读取客户端请求的连接数。这表示服务器正在从客户端读取请求数据。
    Writing: 当前正在向客户端写入响应的连接数。这表示服务器正在将响应数据发送给客户端。
    Waiting: 当前等待客户端请求的连接数。这表示有连接处于空闲状态,等待新的请求。


实验二:基于授权的访问控制
  1. 先安装httpasswd工具:
    yum install -y httpd-tools
  2. 创建一个用户,并在passwd.db中存储用户信息:
    htpasswd -c /usr/local/nginx/passwd.db zhangsan

  3. 只有root和nginx用户可以读,这里的权限只能写400:
    chown nginx /usr/local/nginx/passwd.db
    chmod 400 /usr/local/nginx/passwd.db
  4. 修改nginx.conf:
  5. 检查语法,重启服务:
  6. 此时在浏览器中访问时就需要输入账户密码了:
    输入正确后可以正常访问:


实验三:基于客户端的访问控制
  1. 先说一下访问控制规则:
    deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
    allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
    规则从上往下执行,如匹配则停止,不再往下匹配。
  2. 重启服务,然后进行验证:
    在192.168.188.13(被禁止访问的客户端)上使用curl访问页面时出现了403报错

    在192.168.188.11(允许)上访问时则正常

实验四:基于域名的 Nginx 虚拟主机
  1. 为虚拟主机提供域名解析,注意用谁做客户端就写在谁的配置里:
    echo "192.168.233.21 www.kgc.com www.accp.com" >> /etc/hosts
  2. 为虚拟主机准备网页文档:
    mkdir -p /var/www/html/kgc
    mkdir -p /var/www/html/accp
    echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
    echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html
  3. 修改Nginx的配置文件:
  4. 在客户端上进行访问:

实验五:基于IP 的 Nginx 虚拟主机
  1. 先创建一个虚拟网卡作为另外的服务器的IP:
    ifconfig ens33:0 192.168.188.100 netmask 255.255.255.0
  2. 修改配置文件:
  3. 重启并测试:

实验六:基于端口的 Nginx 虚拟主机
  1. 修改配置文件:
  2. 重启服务并测试:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值