Nginx 从入坑到入土

一.简介

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 从入坑到入土)