Nginx

简介: Nginx

Linux下安装Nginx

如果yum install gcc-c++就出错了,说明yum源不对,执行:

curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo

./configure --prefix=/opt/nginx-1-13 表示将源码编译后放在nginx-1-13目录下,所以在这步操作前,如果没有这个目录要先创建这个目录。

Linux下Nginx命令

Nginx作静态资源服务器

像图片,js,css等静态文件就放在static目录下,直接由nginx返回,这样效率更高。

具体配置:

重启Nginx:./nginx -s reload

然后,把我的静态资源index目录传到/usr/local/nginx目录下面,同conf,html,sbin目录同级

这样,默认访问ip地址时,就会访问/usr/local/nginx/index/index.html页面了

Nginx配置虚拟主机

绑定端口

1. 将/资料/静态页面/index目录上传至  /usr/local/nginx/index下

将/资料/静态页面/regist目录上传至  /usr/local/nginx/regist下

2. 修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf

server {

        listen       81; # 监听的端口

        server_name  localhost; # 域名或ip

        location / { # 访问路径配置

            root   index;   # 根目录

            index  index.html index.htm;  # 默认首页

        }

        error_page   500 502 503 504  /50x.html; # 错误页面

        location = /50x.html {

            root   html;

        }

    }

     server {

        listen       82; # 监听的端口

        server_name  localhost; # 域名或ip

        location / { # 访问路径配置

            root   regist;   # 根目录

            index  regist.html;  # 默认首页

        }

        error_page   500 502 503 504  /50x.html; # 错误页面

        location = /50x.html {

            root   html;

        }    

    }

3.测试访问

地址栏输入http://192.168.177.129/:81 可以看到首页面

地址栏输入http://192.168.177.129/:82 可以看到注册页面

绑定域名

一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。

本地测试可以修改 hosts 文件(C:\Windows\System32\drivers\etc)

可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走dns 服务器。

192.168.177.129 www.hmtravel.com

192.168.177.129 regist.hmtravel.com

做好域名指向后,修改nginx配置文件

    server {

        listen       80;

        server_name  www.hmtravel.com;

        location / {

            root   cart;

            index  cart.html;

        }

    }

    server {

        listen       80;

        server_name  regist.hmtravel.com;

        location / {

            root   search;

            index  search.html;

        }

    }

执行以下命令,刷新配置

[root@localhost sbin]# ./nginx -s reload

测试:

地址栏输入http://www.hmtravel.com/ 进入搜索页面

地址栏输入http://regist.hmtravel.com/ 进入注册页面

Nginx反向代理

   upstream tomcat-travel{

   server 192.168.177.129:8080;

    }

    server {

        listen       80; # 监听的端口

        server_name  www.hmtravel.com; # 域名或ip

        location / { # 访问路径配置

            # root   index;# 根目录

      proxy_pass http://tomcat-travel;

            index  index.html index.htm; # 默认首页

        }

}

Nginx的反向代理缓存

# proxy_cache_path 设置缓存目录

# keys_zone 设置共享内存以及占用空间大小

# max_size 设置缓存大小

# inactive 超过此时间则被清理

# use_temp_path 临时目录,使用后会影响nginx性能

proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off

location / {

       proxy_pass http://tomcats;

       # 启用缓存,和keys_zone一致

       proxy_cache mycache;

       # 针对200和304状态码缓存时间为8小时

       proxy_cache_valid 200 304 8h;

}

集群负载均衡配置

  server {

               listen   80; # 监听的端口

               server_name  www.hmtravel.com; # 域名或ip

               location / { # 访问路径配置

                     proxy_pass http://tomcat-travel;

               }

       }

upstream tomcat-travel{

      #weight表示权重,可以不配置,默认都是1:1:1,当8080端口配置为2后,则表示8080端口负载50%,8081和8082各负载25%max_fails=1 fail_timeout=60s表示高可用,访问失败一次后,过60秒后再次访问;

          server 192.168.177.129:8080 weight=2;

          server 192.168.177.129:8081 max_fails=1 fail_timeout=60s;

          server 192.168.177.129:8082 max_fails=1 fail_timeout=60s;

   }

upstream指令参数

max_conns设置单台tomcat最大连接数

down、backup

max_fails、fail_timeout

Keepalived 提高吞吐量

日志切割

Nginx日志按每分钟一个日志文件的切割脚本如下:

新建shell脚本:

vi /opt/nginx/nginx_log.sh

#!/bin/bash

#设置日志文件存放目录

LOG_HOME="/opt/nginx/logs/"

#备分文件名称

LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log

#重命名日志文件

mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log

#nginx主进程发信号重新打开日志

kill -USR1 `cat /opt/nginx/logs/nginx.pid`

创建Nginx定时任务,每隔一分钟执行一下上面的脚本:

crontab -e

输入:*/1 * * * * sh /opt/nginx/nginx_log.sh

然后重启定时任务:service crond restart

然后cd 到 logs下面看日志文件,就会一分钟产生一个日志文件。

Nginx文件压缩传输配置

#gzip模块设置

#开启压缩

gzip on;

# 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。

默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。

gzip_min_length 2k;

# 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单

位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k

为单位的4倍申请内存。

# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_buffers 4 16k;

#压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间

gzip_comp_level 5;

# 默认值: gzip_types text/html (默认不对js/css文件进行压缩)

# 压缩类型,匹配MIME类型进行压缩

# 不能用通配符 text/*

# (无论是否指定)text/html默认已经压缩

# 设置哪压缩种文本文件可参考 conf/mime.types

gzip_types text/plain application/x-

javascript text/css application/xml;

# 值为1.01.1 代表是否压缩http协议1.0,选择1.01.01.1都可以压缩

gzip_http_version 1.0

# IE6及以下禁止压缩

gzip_disable "MSIE [1-6]\.";

# 默认值:off

# Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服

务器必须要返回包含"Via"header头。

# off - 关闭所有的代理结果数据的压缩

# expired - 启用压缩,如果header头中包含 "Expires" 头信息

# no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息

# no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息

# private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息

# no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息

# no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息

# auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息

# any - 无条件启用压缩

gzip_proxied expired no-cache no-store private auth;

# CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本

gzip_vary on;

Nginx配置进程数,并发数

Nginx安全配置

基于Nginx分布式限流

# 根据IP地址限制速度
# 1) 第一个参数 $binary_remote_addr
#    binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流
# 2) 第二个参数 zone=iplimit:20m
#    iplimit是一块内存区域(记录访问频率信息),20m是指这块内存区域的大小
# 3) 第三个参数 rate=1r/s
#    比如100r/m,标识访问的限流频率
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s;
# 根据服务器级别做限流
limit_req_zone $server_name zone=serverlimit:10m rate=100r/s;
# 基于连接数的配置
limit_conn_zone $binary_remote_addr zone=perip:20m;
limit_conn_zone $server_name zone=perserver:20m;
    server {
        server_name www.imooc-training.com;
        location /access-limit/ {
            proxy_pass http://127.0.0.1:10086/;
            # 基于IP地址的限制
            # 1) 第一个参数zone=iplimit => 引用limit_req_zone中的zone变量
            # 2) 第二个参数burst=2,设置一个大小为2的缓冲区域,当大量请求到来。
            #     请求数量超过限流频率时,将其放入缓冲区域
            # 3) 第三个参数nodelay=> 缓冲区满了以后,直接返回503异常
            limit_req zone=iplimit burst=2 nodelay;
            # 基于服务器级别的限制
            # 通常情况下,server级别的限流速率是最大的
            limit_req zone=serverlimit burst=100 nodelay;
            # 每个server最多保持100个连接
            limit_conn perserver 100;
            # 每个IP地址最多保持1个连接
            limit_conn perip 5;
            # 达到限流条件抛出异常,返回504(默认是503)
            limit_req_status 504;
            limit_conn_status 504;
        }
    }

Nginx跨域请求

静态资源防盗链

Nginx使用过程中可能遇到的问题

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
4月前
|
负载均衡 应用服务中间件 nginx
|
3月前
|
存储 Java 应用服务中间件
nginx
nginx
22 0
|
9月前
|
负载均衡 前端开发 安全
nginx能帮我们做什么?
Nginx是一款高性能的开源Web服务器软件,它可以帮助我们完成以下几个方面的任务:
68 0
|
5月前
|
缓存 应用服务中间件 nginx
Nginx使用总结
Nginx使用总结
61 0
|
11月前
|
负载均衡 应用服务中间件 nginx
五分钟进步系列之nginx(一)
五分钟进步系列之nginx(一)
|
存储 机器学习/深度学习 负载均衡
nginx几个简单问题
《基础系列》
90 0
|
JSON 前端开发 JavaScript
关于nginx使用的小知识
nginx的作用,nginx作为反向代理的使用方式,以及nginx高性能的原因。
243 0
|
网络协议 应用服务中间件 网络安全
Nginx 实现OCSP Stapling
详解Nginx 如何实现OCSP Stapling
833 0
|
应用服务中间件 PHP nginx