2019-05-01笔记:nginx 编译安装及使用

一、编译安装 nginx

nginx 官网:nginx.org

获取源码包

wget http://nginx.org/download/nginx-1.16.0.tar.gz

 

安装依赖:

pcre pcre-devel zlib zlib-devel

yum install pcre pcre-devel zlib zlib-devel -y

配置、编译及安装

./configure --prefix=/lamp/nginx
make & make install

开启防火墙

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

  2019-05-01笔记:nginx 编译安装及使用_第1张图片

目录介绍:

   

            conf 配置目录
            html 网站根目录
            logs 日志
            sbin 二进制文件

二、nginx命令行参数

nginx -s stop               快速关闭

              quit                优雅的关闭

              reload            重新加载配置,使用新配置启动新的工作进程,正常关闭旧的工作进程

              reopen           重新打开日志文件

三、虚拟主机配置

配置项:

worker_processes 1; 子进程数,一般设置为CPU数 * 核心数

worker_connections 1024; 一个子进程最大允许连接1024个链接

虚拟主机额外定义一个server就可以了

1.虚拟主机,不同域名

    server {
        listen 80;
        server_name dust.com;
        
        location / {
            root /var/www/html;
            index index.html;
        }
    }

   2019-05-01笔记:nginx 编译安装及使用_第2张图片

2.虚拟主机,不同端口

    server {
        listen 8080;
        server_name dust.com;

        location / {
            root /var/www/html;
            index index.html;    
        }
    }

  2019-05-01笔记:nginx 编译安装及使用_第3张图片

需要提前打开8080端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

四、日志管理

main格式:

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

自定义日志:

# 需要提前将main格式的注释打开
access_log logs/dust.access.log main;

五、Location

location = patt {} 精准匹配
location   patt {} 一般匹配
location ~ patt {} 正则匹配

首先看有没有精准匹配,如果有,则停止匹配过程。

普通匹配是匹配程度高的生效,不受排列顺序影响。

正则匹配收排列顺序影响,最后一个匹配的生效。

如果普通匹配和正则匹配同时存在,则正则匹配会覆盖普通匹配。

如果访问时没有具体的文件名,如:http://www.baidu.com/。则nginx会在内部二次访问。

六、Rewite

指令:

if
           set 定义变量
           return
           break
           rewirte

if 格式:
           if (条件) {
                重写模式
           }

注意:if和()中间的空格不能少

条件:

= 等于

~ 正则匹配

~* 不区分大小写

-f -d -e 分别是 判断是否为文件、判断是否为目录、判断是否存在

例子:
    // 禁止IP访问
    if ($remote_addr = 192.168.182.1) {
        return 403;
    }
    // 如果浏览器为chrome浏览器,则重定向到chrome.html这个页面
    if ($http_user_agent ~* chrome) { // 正则不区分大小写匹配
        rewrite ^.*$ /chrome.html;	// 重写到chrome.html页面
        break;	// 重写后跳出,否则会500
    }
    // 如果页面不存在,跳转至404.html
    if (!-e $document_root$fastcgi_script_name) {
        rewrite ^.*$ /404.html;
        break;
    }

七、配置PHP解析

    # nginx.conf 中打开注释
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

  2019-05-01笔记:nginx 编译安装及使用_第4张图片

nginx重新加载配置
nginx/sbin/nginx -s reload
启动PHP-FPM
php/sbin/php-fpm

   2019-05-01笔记:nginx 编译安装及使用_第5张图片

八、gzip压缩提升网站速度

gzip常用参数:

gzip on|off 是否开启gzip

gzip_buffers 32 4K | 16 8K 缓冲(压缩在内存中缓存几块?每块多大?)

gzip_comp_level [1-9] 推荐6 压缩级别(级别越高,压的越小,越浪费CPU资源)

gzip_disable 正则匹配 什么样的URL不进行gzip

gzip_min_length 200 开始压缩的最小长度 (mime类型可以在nginx/conf/mime.conf下查看)

gzip_proxied 设置请求者代理服务器该如何缓存内容

gzip_types text/plain application/xml 对那些类型的文件使用压缩 如:txt,xml,html,css

gzip_vary on|off 是否传输gzip压缩标志

配置:

           2019-05-01笔记:nginx 编译安装及使用_第6张图片

压缩前大小

            2019-05-01笔记:nginx 编译安装及使用_第7张图片

压缩后大小

            2019-05-01笔记:nginx 编译安装及使用_第8张图片

九、expires缓存提升网站负载

格式:expires 30s;      30秒

                      expires 30h;      30小时

                      expires 30d;       30天

image目录下的图片全部缓存一天

           2019-05-01笔记:nginx 编译安装及使用_第9张图片

出现红色框说明缓存成功

           2019-05-01笔记:nginx 编译安装及使用_第10张图片

百度也使用了expires缓存

           2019-05-01笔记:nginx 编译安装及使用_第11张图片

十、反向代理

nginx 使用反向代理让本地8080端口的apache服务器解析PHP

           2019-05-01笔记:nginx 编译安装及使用_第12张图片

apache配置虚拟主机监听8080端口

           2019-05-01笔记:nginx 编译安装及使用_第13张图片

从这里我们可以看出区别了,我的apache用的是PHP7,而我的nginx用的是5.6,这也就证明了nginx将PHP传递给apache解析。

2019-05-01笔记:nginx 编译安装及使用_第14张图片

这里有一个问题:就是请求的客户IP为nginx的IP,而不是真实客户的IP,所以我们在nginx设置,将客户IP传递过来。

           2019-05-01笔记:nginx 编译安装及使用_第15张图片

这是apache的日志:上面是没有带客户IP,下面是带客户IP的

           

这是nginx的日志:上面是没有带客户IP,下面是带客户IP的

从这两个日志的结果来看,带客户IP和没带客户IP的是两种情况,因为是本机虚拟机测试,所以没有特别的结果。但是日志的不同也能看出这个参数的效果。

十一、nginx实现负载均衡

weight 权重

max_fails 节点请求失败次数

max_fails 节点请求失败时间

这里加了两个端口的server,用来模拟多个服务器

           2019-05-01笔记:nginx 编译安装及使用_第16张图片

所有关于图片的请求全部由 "图片服务器" imgserver 处理。多个服务器就是由upstream "起别名",然后由proxy_pass指向别名。

           2019-05-01笔记:nginx 编译安装及使用_第17张图片

然后请求三次,看两个服务器的日志。81的被请求两次,82的被请求一次。负载均衡默认的算法就是针对服务器的顺序逐个请求。

2019-05-01笔记:nginx 编译安装及使用_第18张图片

十二、nginx连接memcache

nginx配置:

location / {
    // 设置变量
    set $memcached_key "$uri";
    // 请求memcache服务器
    memcached_pass 127.0.0.1:11211;
    // 没有结果则返回一个错误页面(回调页面)。
    error_page 404 /callback.php;
}

callback.php

// 获取key,即URI
$uri = $_SERVER['REQUEST_URI'];
// 第一次请求则输出
echo 'request='.$uri;
// 实例化memcached
$memcache = new memcached();
// 添加一个服务器
$memcache->addServer('localhost',11211);
// 添加一条缓存
$memcache->add($uri, 'request='.$uri, 0, 300);
// 关闭所有链接
$memcache->quit();

 

你可能感兴趣的:(笔记)