美文网首页
Nginx 从入坑到入土

Nginx 从入坑到入土

作者: BzCoder | 来源:发表于2018-11-09 11:07 被阅读21次

    一.简介

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。
    所谓的反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

    二.为什么选择Nginx

    • I/O多路复用
      I/O多路复用就是多个描述符的I/O操作,可以在一个线程内并发,交替地顺序完成,这就叫I/O多路复用,IO多路复用实现方式select,poll,epoll。epoll效率更高。
    • 轻量级
      功能模块少 代码模块化
    • CPU亲和
      Cpu亲和是一种把Cpu亲和和Nginx工作进程绑定方式,把每个worker进程固定在一个cpu上执行,减少切换cpu的cache miss,以此获得更好的性能。
    • Sendfile
      Sendfile 函数让两个文件描写叙述符之间直接传递数据(全在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率非常高,被称之为零拷贝。
      轻量级 功能模块少 代码模块化

    三.安装Nginx

    环境:Centos7

    1. 安装必要环境
      yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
      yum -y install wget httpd-tools vim
    2. 关闭iptable,防火墙
      iptables -F
      iptables -t nat -F
      setenforce 0
    3. /etc/yum.repos.d/nginx.repo添加仓库。
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    
    1. 安装
      yum install nginx
    2. 查看配置参数以及模块
      nginx -V
    3. 查看配置文件
      nginx -t

    7.Location匹配(优先级由上至下)
    = :进行普通字符精确匹配,也就是完全匹配
    ^~: 表示普通字符匹配,使用前缀匹配
    ~(区分大小写) ~*(不区分大小写):表示执行一个正则匹配
    访问Nginx官方网站http://nginx.org/en/linux_packages.html#stable 查看Nginx的安装方法
    各类配置参数可以参考官方文档http://nginx.org/en/docs/

    四.常见Nginx中间架构

    静态资源WEB服务

    1. 设置浏览器缓存
    2. 防盗链
    3. 跨域控制
    #以下配置代表允许来自于百度请求
    add_header Access-Control-Allow-Origin http://www.baidu.com
    add_header Access-Allow-Method GET,POST,PUT,DELETE,OPTIONS
    

    代理服务

    实现
    使用的都是proxy_pass语法,正向代理访问外网,反向代理访问内部服务器
    PS:访问域名的时候还需要配置DNS解析:resolver 8.8.8.8

    正向代理与反向代理的区别
    位置不同
    正向代理,架设在客户机和目标主机之间;
    反向代理,架设在服务器端;
    代理对象不同
    正向代理,代理客户端,服务端不知道实际发起请求的客户端;
    反向代理,代理服务端,客户端不知道实际提供服务的服务端;

    负载均衡调度器SLB

    1.GSLB
    2.SLB
    四层负载均衡,七层负载均衡

    基本语法:
    使用的都是upstream param语法

    upstream test{
     server 192.168.15.129:8080;
     server 192.168.15.129:8081;
     server 192.168.15.129:8082;
    }
    

    其他参数:
    weight:权重参数
    down:当天服务不参与负载均衡
    backup:预留的备份服务器
    max_fails:允许请求失败的次数
    fail_timeout:经过最大失败后,服务暂停的时间
    max_conns:限制最大的接受的连接数

    调度算法:
    轮询:按时间顺序逐一分配
    加权轮询:按设置的weight分配
    ip_hash:按请求的IP的HASH结果分配,这样同一个IP固定访问到同一台后端服务器,开启在upstream中加入ip_hash即可。
    url_hash:按URL的HASH结果分配,同一个URL定向到同一台后台服务器,开启在upstream中加入hash $request_uri即可。
    least_conn:最少链接数,那个机器连接数少就分发
    hash关键值:hash自定义的key

    • 动态缓存

    try_files

    语法
    try_files $uri $uri/ /index.php
    作用
    依次匹配文件是否存在

    Alias和Root的区别

    location /request_path/image/{
      alias /local_path/image/;
    }
    

    http:/localhost/request_path/image/cat.png - > /local_path/image/cat.png

    location /request_path/image/{
      root /local_path/image/;
    }
    

    http:/localhost/request_path/image/cat.png - > /local_path/image/request_path/cat.png

    Rewrite

    语法
    rewrite regex replacement flag
    作用
    1.Url访问跳转
    2.SEO优化,优化路径
    3.维护
    4.安全(伪静态页面)

    flag
    last:停止rewrite检测,新建请求。
    break:停止rewrite检测,到root下查找。
    redirect:返回302临时重定向,地址栏会显示跳转后的地址
    permanent:返回301永久重定向,地址栏会显示跳转后的地址,即使源站服务停止了,也会继续重定向。
    示例
    以下的作用是把nginx.org改写为www.nginx.org;

    server{
    listen 80;
    server_name nginx.org;
    rewrite ^ http://www.nginx.org$request_uri?;
    }
    
    server{
    listen 80;
    server_name www.nginx.org;
    }
    

    动静分离

    动静分离就是把动态资源和静态资源分开请求。静态资源直接请求,动态资源访问tomcat。

    upstream java_api{
      server 127.0.0.1:8080;
    }
    location ~ \.jsp$ {
     proxy_pass http://java_api;
     index index.html index.htm
    }
    location ~ \.(jpg|png|gif)$  {
      expires 1h;
      gzip on;
    }
    

    Geoip模块

    所谓GeoIP,就是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息。

    • 安装模块
      yum install nginx-module-genip
    • 下载数据库
      wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
      wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
    • 修改nginx.conf添加模块加载
      load_module "modules/ngx_http_geoip_module.so";
      load_module "modules/ngx_stream_geoip_module.so";
    • conf添加应用
    geoip_country /opt/work/GeoIP.dat;
    geoip_city /opt/work/GeoLiteCity.dat;
    upstream bz.coder.com{
       server localhost;
    }
    server {
        listen       80;
        server_name  localhost;
    
        location /myip {
            default_type text/plain;
            return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
        }
    

    配置Https服务

    1.生成密钥和CA证书

    1. 生成key密钥
      确认安装openssl,输入openssl genrsa -idea -out ssl.key 1024,生成过程中还会让你输入一个密码,生成完毕后会生成ssl.key文件。
    2. 生成证书签名请求文件(csr文件)
      输入openssl req -new -key ssl.key -out sslkey.csr生成csr文件,按照提示输入相关信息之后会生成csr证书签名请求文件。
    3. 生成证书签名文件(CA文件)
      对于公司,将生成的key文件以及csr文件发送给相应的签名机构生成CA文件。
      对于个人,openssl x509 -req -days 3650 -in sslkey.csr -signkey ssl.key -out sslkey.crt即可打包生成CA文件,期间要输入之前key所对应的密码。

    2.Nginx端配置

    • 添加以下三行:
      listen 443 ssl
      ssl_certificate +证书路径
      ssl_certificate _key + Key文件路径
    • 添加后重新运行,输入netstat -luntp|grep 443查看443端口是否在始终中。
    • 如果没有netstat工具,先安装yum install net-tools
    • 接下来就可以通过HTTPS访问我们的页面

    3.优化HTTPS服务

    1. 激活keepalive长连接,添加keepalive_timeout 100;
    2. 设置ssl session缓存,添加ssl_session_cache shared:SSL:10m;, ssl_session_timeout 10;

    4.配置苹果要求的后台HTTPS服务
    作为苹果后台,需要满足以下要求

    • openssl版本大于1.0.2
    • HTTPS证书必须使用SHA256以上哈希签名算法
    • HTTPS证书必须使用RSA 2048位或ECC 256位以上的公钥算法
    • 使用前向加密技术
      openssl x509 -noout -text -in /etc/nginx/ssl_key/sslkey.crt 查看加密类型信息

    Nginx性能优化

    worker_processes 设置使用CPU数目,一般设置和CPU数目一致即可。
    worker_cpu_affinity auto 自动分配CPU

    相关文章

      网友评论

          本文标题:Nginx 从入坑到入土

          本文链接:https://www.haomeiwen.com/subject/awquxqtx.html