• nginx入门


    想必大家都听过大名鼎鼎的nginx了吧 那么有没有纳闷这个到底是什么作用呢?

    nginx简介:

      Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。

    目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序

      说直白点 nginx就是为我们提供了web访问服务的,因为你不能直接进行访问web的,需要一种媒介  nginx就是这种媒介物

    nginx的一些作用:

      

    支持高并发,能支持几万并发连接
    资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
    可以做http反向代理和负载均衡
    支持异步网络i/o事件模型epoll

     Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

    安装环境:

      

    一. gcc 安装
    安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
    
    yum install gcc-c++
    二. PCRE pcre-devel 安装
    PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
    
    yum install -y pcre pcre-devel
    三. zlib 安装
    zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
    
    yum install -y zlib zlib-devel
    四. OpenSSL 安装
    OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
    nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

    所有依赖配置(都装了绝对没害处) yum install gcc patch libffi
    -devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

    编译安装,启动nginx:

    1、 wget下载:

    wget -c https://nginx.org/download/nginx-1.12.0.tar.gz

    2、解压缩:

    tar  -zxvf nginx-1.12.0.tar.gz

    3、 切换到你的 解压后生成的nginx-1.12.0文件夹内

     4、这个时候生成了安装包 你要把你的安装的路径和信息先声明

    ./configure --prefix=要安装的路径     

    ./configure --prefix=/opt/nginx1-12/ 指定安装到/opt/nginx1-12内

    ./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module  开启nginx状态检测功能

     5、然后执行 安装

    make && make install

    6、找到你指定安装的文件夹

    7、进入安装目录内的sbin目录

    启动nginx,进入sbin目录,找到nginx启动命令
    cd sbin
    ./nginx #启动
    ./nginx -s stop #关闭
    ./nginx -s reload #重新加载 在不用重新启动nginx的时候进行加载  防止你的程序正在跑着影响使用

    然后查看你的端口: netstat -ntlp

    这个时候nginx启动来了 我们进行访问看看

    输入ip80端口即可进入

     总结:

    切换到你要下载到目录
    
    1.下载源码包
    wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
    
    2.解压缩源码
    tar -zxvf nginx-1.12.0.tar.gz
    
    3、切换到你的解压目录
    cd nginx-1.12.0

    4、指定安装目录
    ./configure --prefix=/opt/nginx1-12/

    5、开始安装
    make && make install


    6、然后进入你的指定安装目录内
    切换到 sbin目录
    ./nginx #启动
    ./nginx -s stop #关闭
    ./nginx -s reload #重新加载
     

    安装完成后检测服务

    netstat -tunlp |grep 80
    curl -I 127.0.0.1
    #如果访问不了,检查selinux,iptables

    nginx配置:

    前端界面显示:

    html中的index.html就是你访问nginx  80端口的时候显示的

     如果想改变nginx的访问界面显示就进入html目录然后编译index.html

    开头是<mate charset=utf8> 格式

    eg:

     然后切换到sbin目录下进行重新加载

    sbin下:
    
    
    nginx -t 看看你的nginx.conf中的配置信息是否有错误
    
    平滑重启也是 在sbin下执行的 nginx -s reload

     

    配置文件conf

     主要配置都在nginx.conf中

    我们可以根据tpo指令来查看cpu 然后摁1 查看cpu显示:

     我的是单核的

    一个域名只可以解析一个主机 server 虚拟主机标签是可以在 一个端口的时候进行不同的网址输入访问不同的信息

    eg:

      我是一个淘宝卖家 一个店铺卖鞋子 一个店铺卖娃娃,要两个网站 ,但是放置的资源都不多 难道还要两个服务器吗,这个时候我们利用nginx的server

      就可以解决,一个端口不同的网址请求进入不同的网站

    nginx.conf

    大部分的nginx配置都是在   nginx.conf  中的

     

     server 是你的虚拟机的配置: 也就是你访问的时候可以进行访问响应的配置

    也可以修改请求的路径 来改变请求的信息

     我们在/opt/static中创建一个inde.html 即可 (创建index.html 和inde.html都可以的)

    基于域名的多虚拟主机实战

    ginx可以自动识别用户请求的域名,根据不同的域名请求服务器传输不同的内容,只需要保证服务器上有一个可用的ip地址,配置好dns解析服务。

    /etc/hosts是linux系统中本地dns解析的配置文件,同样可以达到域名访问效果

    1、模拟域名解析 模拟dns服务器:

    因为请求进来要解析其域名 我们没有dns服务器就只能修改hosts文件来模拟
    
    1、准备两个域名在hosts文件中强制解析
        linux可以在etc/hosts 中修改
        下面以wondos为例子
        C:WindowsSystem32driversetchosts   (windows8  10的用户,请用管理员运行 )
    
    
        写入域名解析(自己随便写入  只有nginx的配置和这里一样即可):
       你的linux服务器ip 要访问的地址1
       你的linux服务器ip 要访问的地址2
      

     

    2、找到nginx.conf   编辑配置文件

     修改http 中的server  建立两个不通的server 对应你的访问地址

    # 虚拟主机标签段  ,这里定义mytb.com
        server {
            listen       80;  # 监听的端口
            server_name  www.mytb.com;
    
            location / {
                 root /opt/static/mytb/;  # 自定义的寻址界面
                 index index.html inde.html;
            }
            #error_page  404              /404.html;  # 当返回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;
            }
    
        }
        #  定义myjd.com
        server{
            listen          80;
            server_name     www.myjd.com;  
            location / {
                root /opt/static/myjd/; # 自定义的寻址界面
            index index.html; 
    } }

     修改完之后验证nginx的配置 ,并且去创建你的配置中定义的寻址文件目录

     查看并且创建

    然后在myjd和mytb文件夹内各自创建index.html文件 然后把填写你要显示的内容 我这里把淘宝和京东的首页源代码copy下来

     这个时候我们在自己的电脑上输入对应的地址  www.mytb.com 和 www.myjd.com 就可以访问不同的界面了 

    nginx访问日志(access_log):

    这个是帮你显示你的nginx请求之后都是你做了什么,日志不用说了 很强大的

    日志功能对每个用户访问网站的日志信息记录到指定的日志文件里,开发运维人员可以分析用户的浏览器行为,此功能由ngx_http_log_module模块负责,官网地址是:

    http://nginx.org/en/docs/http/ngx_http_log_module.html

    控制日志的参数:

          log_format    记录日志的格式,可定义多种格式
          accsss_log    指定日志文件的路径以及格式


    默认的存放路径是在nginx安装的目录下的路径下的logs/access.log文件

     默认你屏蔽的 我们使用的时候就给它打开

    对应参数解析:

      

    $remote_addr    记录客户端ip
    $remote_user    远程用户,没有就是 “-”
    $time_local    对应[14/Aug/2018:18:46:52 +0800]
    $request     对应请求信息"GET /favicon.ico HTTP/1.1"
    $status      状态码
    $body_bytes_sent  571字节 请求体的大小
    $http_referer  对应“-”  由于是直接输入浏览器就是 -
    $http_user_agent  客户端身份信息
    $http_x_forwarded_for  记录客户端的来源真实ip 97.64.34.118

    当我们tail -f 查看日志的后

    显示效果如下:

    60.168.97.34 - - [16/Jan/2019:13:56:01 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    " "-"

    日志格式配置定义:

    log_format是日志关键字参数,不能变
    main是日志格式指定的标签,记录日志时通过main标签选择指定的格式。 

    nginx限制网站来源IP访问:

    如果你有时候想限制某一个ip不让其访问你的网站或者发现某一个ip在疯狂访问攻击你的网站那么就可以限制其ip

    如果哪天发现你的nginx很慢,或者检查access.log时候,有一个some body疯狂请求你的nginx server,那么可以禁止这个IP访问

    在location中使用 deny 来进行限制,可以限制单个ip也可以限制多个ip 也可以限制ip段

    限制ip或ip段访问
    

    location / {
    deny 192.168.1.1;   # 禁止这个ip访问
    deny 192.168.1.0/24;  # 禁止这个ip段访问
    allow 10.1.1.0/16;
    }

     

     

    再访问就会是 然后就会显示:

     nginx 的代理:

    nginx实现负载均衡的组件

    ngx_http_proxy_module    proxy代理模块,用于把请求抛给服务器节点或者upstream服务器池

    具体实现参数 :proxy_pass 跟上你的ip地址

    proxy_pass 代理配置

     
    指定ip配置
    poroxy_pass  http://192.168.1.123
    
    指定端口配置
    proxy_pass   http://192.168.1.123:8080

    正向代理

    正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说:

    我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

     

    反向代理

    对于客户端而言,代理服务器就像是原始服务器。

    实现一个简单的反向代理:

      准备两台机器一台多代理一台是你的主机

    在代理主机的conf中进行配置 proxy_pass

    配置单的时候加上你的要代理的主机的ip即可 有端口限制要加上端口

     然后我们这个时候保存平滑重启nginx就可以通过代理主机访问到真是主机的内容了

      

  • 相关阅读:
    Quartz2.0以上版本的单机和集群
    Mysql的Haproxy反向代理和负载均衡
    spring AOP原理解析
    Restful接口调用方法超详细总结
    mysql数据库主从同步
    数据备份的OSS接口
    读取properties配置文件的方法
    算法学习——堆排序(二叉树排序)
    回溯算法的实现
    冒泡排序
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/10271109.html
Copyright © 2020-2023  润新知