Nginx学习总结

Nginx概述

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx功能

Nginx 功能:
1) nginx 作为 http 服务器:类似 apache,tomcat,遵循 http 协议。
a) 访问图片服务器,加载图片
b) 页面静态化:nginx 访问 html 页面。
2) 负载均衡(反向代理服务器)
a) 高并发
b) 提高网站性能
3) 高速缓存
a) 不建议使用。网站访问量较小,可以使用。
4) 保护网站安全。

Nginx 作为 HTTP 服务器

Nginx 作为 HTTP 服务器,类似 tomcat,访问页面。
业务使用:
1) 访问图片服务器
2) 访问 Freemarker 页面静态化页面

负载均衡(反向代理服务器)

正向代理,针对客户机来说,客户机发送请求,不能直接访问服务器,把请求交给代理服务
器,代理服务器转发请求给目的服务器,获取请求数据,把数据交给用户。
正向代理特点:
1) 从宏观上分析:代理服务器和客户机处于统一机房。
2) 客户机是指定代理服务器存在
3) 代理服务器必须经过配置然后才能使用。

反向代理:针对客户机来说,反向代理服务器针对客户来说是不可见,客户机发送请求,反
向代理服务器转发请求,返回结果。
反向代理特点:
1) 反向代理服务器和项目部署在 同一个机房。
2) 反向代理服务器对客户机是不可见的。

负载均衡是根据 http 重定向转发请求,提高网站性能。
如果集群中请求机器出现宕机,或者比较忙,nginx 修改 http 请求地址,重定向机器完好,或者不忙的机器,提高网站性能。提高网站容错能力。

高速缓存

Nginx 缓存的是一些静态资源:html 页面,样式,js 都可缓存。

网站安全

主要通过 nginx 和服务器之间防火墙保护网站安全,防火墙只允许经过 nginx 请求通过,其他的请求不能通过。

Nginx安装

nginx安装环境

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

Linux 虚拟机联网

联网环境:NAT 路由模式联网
网关正确,DNS 服务器必须和当前联网 DNS 服务器是一个 IP。
修改命令:vim /etc/sysconfig/network-scripts/ifcfg-eth0

安装Nginx

1) 导入 nginx 安装包
a) Rz 命令导入 nginx 安装包到 usr/local/hadoop 目录下面。
2) 解压:tar –zxvf nginx-1.8.0.tar.gz

    [root@localhost hadoop]# ll
    total 161844
    -rw-r--r--. 1 root root 8816567 May 5 2015 apache-tomcat-7.0.61.tar.gz
    drwxr-xr-x. 8 uucp 143 4096 Oct 8 2013 jdk1.7.0_45
    -rw-r--r--. 1 root root 138094686 May 5 02:08 jdk-7u45-linux-x64.tar.gz
    drwxr-xr-x. 8 1001 1001 4096 Apr 21 2015 nginx-1.8.0
    -rw-r--r--. 1 root root 832104 Jun 8 2015 nginx-1.8.0.tar.gz

3)设置安装参数
进入 nginx 解压目录进行参数设置:

    ./configure \
    --prefix=/usr/local/hadoop/nginx \
    --pid-path=/var/run/nginx/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-http_gzip_static_module \
    --http-client-body-temp-path=/var/temp/nginx/client \
    --http-proxy-temp-path=/var/temp/nginx/proxy \
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
    --http-scgi-temp-path=/var/temp/nginx/scgi
    --prefix:设置 nginx 安装路径

/var/temp/nginx 目录需要手动创建
创建名令:mkdir -p /var/temp/nginx
3) 编译
编译命令:make
4) 安装
安装命令:make install
5) 启动
a) 进入 nginx 安装目录 sbin
b) ./nginx
6) 访问 nginx

Nginx命令

Nginx启动流程

Nginx 启动时候默认加载安装目录 conf/nginx.conf
也可以指定加载配置路径:./nginx –c /usr/local/hadoop/nginx-1.8.0/conf/nginx.conf

启动命令

1)./nginx
2)./nginx –s reload

停止命令

1)./nginx –s stop
解析:强制终止 nginx 进程。
2)./nginx –s quit
解析:先让 nginx 把任务完成,然后终止。

Nginx.conf

    worker_processes 1; //全局块
    error.log;
    error.log notice;
    error.log info;
    nginx.pid;
    events {
     worker_connections 1024; //events 块
    }
    http { //http 块
     include mime.types;
     default_type application/octet-stream; 
     sendfile on;

     keepalive_timeout 65;
     server { //server 块
     listen 80;
     server_name localhost;
     location / { //资源路径块
     root html;
     index index.html index.htm;
     }

     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root html;
     }

     }
    }

全局块:配置影响 nginx 全局参数,配置工作进程数。默认 1
Events:工作连接数,默认 1024.
http 块:配置多个 Server,配置虚拟主机,负载均衡等等。
Server 块:配置服务器,服务器端口,服务器 IP 地址。
Location 块:定位资源文件位置

虚拟主机

虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名。
1) 基于端口虚拟主机
2) 基于域名虚拟主机

端口虚拟主机

修改 nginx.conf 配置文件:

    http {
     include mime.types;
     default_type application/octet-stream; 
     sendfile on;

     keepalive_timeout 65;
     server {
     listen 80;
     server_name localhost;
     location / {
     root html;
     index index.html index.htm;
     }

     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root html;
     }

     }
     server {
     listen 81;
     server_name localhost;
     location / {
     root html-81;
     index index.html index.htm;
     }

     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root html;
     }

     }

创建资源访问路径
nginx 配置文件 Server 就是我们虚拟主机服务器,访问 81 端口所对应的主机,81 端口所对应资源路径是 location html-81,访问文件夹 html-81 中 index.html

重启 nginx
重启命令:./nginx –s reload

基于域名虚拟主机

修改 nginx.conf 配置文件:

    http {
     include mime.types;
     default_type application/octet-stream; 
     sendfile on;

     keepalive_timeout 65;
     server {
     listen 80;
     server_name www.jd.com;
     location / {
     root html;
     index index.html index.htm;
     }
    www.jd.com
    Jd.search.com


     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root html;
     }

     }
     server {
     listen 80;
     server_name jd.search.com;
     location / {
     root html-81;
     index index.html index.htm;
     }

     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root html;
     }

     }

反向代理

代理服务器:客户机发送请求给代理服务器,代理 服务器把请求转发 tomcat 服务器,tomcat接受请求,处理请求,返回处理结果给代理服务器,代理服务器返回给客户机。

部署 tomcat

配置nginx.conf

    http {
         include mime.types;
         default_type application/octet-stream; 
         sendfile on;

         keepalive_timeout 65;
         upstream mytomcat1{
        server 192.168.66.66:8080;
         }
         upstream mytomcat2{
        server 192.168.66.66:8081;
         }
         server {
         listen 80;
         server_name www.e3mall.com;
         location / {
         proxy_pass http://mytomcat1;
         }

         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
         root html;
         }

         }
         server {
         listen 80;
         server_name jd.search.com;
         location / {
         proxy_pass http://mytomcat2;
         }

         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
         root html;
         }

     }

1) 客户机发送请求 www.e3mall.com
2) Nginx 接受请求:通过 nginx.conf 配置主机 Server 地址匹配:www.e3mall.com
3) 匹配成功:就会去 location 下面寻找需要资源
4) 在 location 配置代理:去寻找代理服务器。http://mytomcat1
5) 寻找名称是 mytomcat1 的 upstream
6) Upstream 负责把请求转发 tomcat1,或者 tomcat2

负载均衡

发送一个请求给反向代理服务器,反向代理服务器把请求分发给服务器,如果有服务器宕机,nginx 重定向请求,如果服务器较忙,nginx 也可以转发请求。

配置 nginx.conf

    http {
         include mime.types;
         default_type application/octet-stream; 
         sendfile on;

         keepalive_timeout 65;
         upstream mytomcat1{
        server 192.168.66.66:8080;
        server 192.168.66.66:8082;
         }
        www.jd.com
        Jd.search.com
         upstream mytomcat2{
        server 192.168.66.66:8081;
         }
         server {
         listen 80;
         server_name www.jd.com;
         location / {
         proxy_pass http://mytomcat1;
         }

         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
         root html;
         }

         }
         server {
         listen 80;
         server_name jd.search.com;
         location / {
         proxy_pass http://mytomcat2;
         }

         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
         root html;
         }

     }

负载均衡流程:
1) 客户机发送请求给 nginx 服务器
2) Nginx 的 Server 匹配请求地址
3) 从 location 寻找资源,没有静态资源,找代理
4) 通过 proxy_pass 转发 upstream 代理服务器
5) Upstream 代理服务器有 2 台
6) Nginx 根据 nginx 轮询算法访问 tomcat 服务器(2 台服务器都不忙)

负载均衡策略

1) 轮询
Nginx 代理服务器:upstream 中包含的服务器默认权重都是 1,也就说 tomcat1 和 tomcat2 地
位都是平等,访问规则:ACACACAC…………..
2) 修改权重
访问规则:ACCACCACC…
upstream mytomcat1{
server 192.168.66.66:8080 weight=1;
server 192.168.66.66:8082 weight=2;
}
3) IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

4) fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}

5) url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值