阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx详解以及LNMP的搭建

179次阅读
没有评论

共计 15367 个字符,预计需要花费 39 分钟才能阅读完成。

一、nginx 介绍

Nginx 详解以及 LNMP 的搭建

1.1 特性:

模块化 设计,较好的扩展性

高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000 个 keep-alive 连接模式下的非活动连接,仅需要 2.5M 内存

event-driven,aio,mmap,sendfile

基本功能:

静态资源的 web 服务器

http 协议 反向代理 服务器,负载均衡

pop3/imap4 协议反向代理服务器

FastCGI(lnmp),uWSGI(Python) 等协议

模块化(非 DSO),如 zip,SSL 模块

web 服务相关的功能:

虚拟主机(server

支持 keep-alive  和管道连接

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于 IP 及用户的访问控制

支持 速率限制 并发数限制

重新配置和 在线升级而无须中断 客户的工作进程

Memcached 的 GET  接口

1.2 nginx 架构

 Nginx 详解以及 LNMP 的搭建 

nginx 的程序架构:

master/worker 结构

一个 master 进程:

负载加载和分析配置文件、管理 worker 进程、平滑升级

 一个或多个 worker 进程

处理并响应用户请求

缓存相关的进程:

cache loader:载入缓存对象

cache manager:管理缓存对象

1.3 nginx 高度模块化

但其模块早期不支持 DSO 机制;1.9.11 版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

• HTTP:模块:ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules  需编译时指定

• Mail  模块 ngx_mail_*

• Stream 块 模块 ngx_stream_*

第三方模块

1.4 nginx 的功用

静态的 web 资源服务器

html,图片,js,css,txt 等静态资源

结合 FastCGI/uWSGI/SCGI 等协议反向代理动态资源请求

http/https 协议的反向代理

imap4/pop3 协议的反向代理

tcp/udp 协议的请求转发(反向代理)

二、nginx 目录结构和命令

2.1 nginx 命令

ls /usr/local/nginx/

html 是测试页,sbin 是主程序

ls /usr/local/nginx/sbin/

nginx  只有一个程序文件

ls /usr/local/nginx/html/

50x.html index.html  测试网页

Nginx:默认为启动 nginx

-h  查看帮助选项

-V  查看版本和配置 选项

-t  测试 nginx 语法错误

-c filename  指定配置文件(default: /etc/nginx/nginx.conf)

-s signal  发送信号给 master 进程,signal 可为:

stop, quit,reopen, reload  示例:-s stop  停止 nginx -s reload  加载配置文件

注意:不要和 systemctl 混合使用

-g directives  在命令行中指明全局指令

2.2 配置文件的组成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi,uwsgi,scgi 等协议相关的配置文件

mime.types:支持的 mime 类型

主配置文件的配置指令:

directive value [value2 …];

注意:

(1)  指令必 须以分号结尾

(2)  支持使用配置变量

内建变量:由 Nginx 模块引入,可直接引用

自定义变量:由用户使用 set 命令定义

set variable_name value;

引用变量:$variable_name

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p2.htm

三、nginx 主配置文件的介绍和设置

3.1 Main 全局配置段常见的配置指令分类

3.1.1 介绍

– 正常运行必备的配置

– 优化性能相关的配置

– 用于调试及定位问题相关的配置

– 事件驱动相关的配置

3.1.2 一些设置

user nginx;                //nginx 运行时是以谁的身份开启的子进程

worker_processes auto;      // 进程数,auto 是自动和 CPU 核数相对应

worker_priority number;    // 指定 worker 进程的 nice 值,设定 worker 进程优先级:[-19,19]

error_log  /var/log/nginx/error.log  info;  // 错误日志的路径和级别

pid /var/run/nginx.pid;     // 指定存储 nginx 主进程 PID 的文件路径

include file                // 指明包含进来的其它配置文件片断

events {

    worker_connections  30000;  // 每个 worker 进程所能够打开的最大并发连接数数量,默认是 1024,一般都不够,调大

    use epoll;      // 指明并发连接请求的处理方法, 默认自动选择最优方法

}

accept_mutex on/off;        // 前台 | 后台运行

Nginx 详解以及 LNMP 的搭建

3.2 http 协议段的相关配置

格式介绍

http {// 可以放多个 server 段

    … …

    server {

        …

        server_name

        root

        location [OPERATOR] /uri/ {

        …

        }

    }

    server {

    …

    }

}

3.3 与套接字相关的配置

(1)server 配置虚拟主机

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}

Nginx 详解以及 LNMP 的搭建 

(2)listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server  设定为默认虚拟主机

ssl  限制仅能够通过 ssl 连接提供服务

backlog=number  超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size  接收缓冲区大小

sndbuf=size  发送缓冲区大小

注意:

① 基于 port;

listen PORT; 指令监听在不同的端口

② 基于 ip 的虚拟主机

listen IP:PORT; IP  地址不同

③ 基于 hostname

server_name fqdn; 指令指向不同的主机名

 

(3)server_name name …;

虚拟主机的主机名称后可跟多个 由空白字符分隔 的字符串

支持 * 通配 任意长度的任意字符

server_name *.magedu.com www.magedu.*

支持 ~ 起始的 字符做 正则表达式 模式匹配,性能原因慎用

server_name  ~^www\d+\.magedu\.com$

\d 表示 [0-9]

匹配优先级机制从高到低:

① 首先是字符串 精确匹配  如:www.magedu.com

左侧 *通配符 如:*.magedu.com

右侧 * 通配符 如:www.magedu.*

④ 正则表达式:如:~^.*\.magedu\.com$,因为消耗 cpu 运算

⑤ default_server

 

(4)tcp_nodelay on | off;    在长连接的情况下,是否延迟

在 keepalived 模式下的连接是否启用 TCP_NODELAY 选项

当为 off 时,延迟发送,合并多个请求 后再发送

默认 On 时,不延迟发送

可用于:http, server, location

 

(5)sendfile on | off;

是否启用 sendfile 功能,在 内核中封装报文 直接发送,默认 Off

 

(6)server_tokens on | off | build | string

是否在响应报文的 Server 首部显示nginx 版本

3.4 定义路径相关的配置

(7)root

设置 web 资源的路径映射;用于指明请求的 URL 所对应的文档的 主目录路径,可用于 http, server, location, if in location

server {

root /data/www/vhost1;

}

示例

http://www.magedu.com/images/logo.jpg –> /data/www/vhosts/images/logo.jpg

注意:root 不仅可以用在 server 段,还可用于 http、server、location、if in locatin

 

(8)location [= | ~ | ~* | ^~] uri {…}  主要控制 URL 路径

location @name {…}

在一个 server 中 location 配置段可存在多个,用于实现从 uri 到文件系统的路径映射;ngnix 会根据用户请求的 URI 来检查定义的所有 location,并找出一个最佳匹配,而后应用其配置

示例:

① server {…

server_name www.magedu.com;

location /images/ {

root /data/imgs/;

}

}

http://www.magedu.com/images/logo.jpg –> /data/imgs/images/logo.jpg

② =:对 URI 做精确匹配;

location = / {

}

http://www.magedu.com/  匹配

http://www.magedu.com/index.html  不匹配

③ 正则符号的作用

^~:对 URI 的 最左边 部分做匹配检查,不区分字符大 小写

~:对 URI 做正则表达式模式匹配,区分字符大小写

~* :对 URI 做正则表达式模式匹配,不区分 字符大小写

不带符号:匹配起始于此 uri 的所有的 uri

④ 匹配优先级从高到低:

=, ^~,  ~/ ~*, 不带符号

 Nginx 详解以及 LNMP 的搭建

(9)alias path;

路径别名,文档映射 的另一种机制;仅能用于 location 上下文

示例:

http://www.magedu.com/bbs/index.php

location /bbs/ {

alias /web/forum/;

} –> /web/forum/index.html

location /bbs/ {

root /web/forum/;

} –> /web/forum/bbs/index.html

注意:location 中使用 root 指令和 alias 指令的意义不同

(a) root ,给定的路径对应于 location 中的 /uri/ 左 侧的 /

(b) alias ,给定的路径对应于 location 中的 /uri/ 右 侧的 /,完全置换

 

(10)index file …;

指定 默认网页资源,注意:ngx_http_index_module 模块

例:index index.php index.html

 

(11)error_pagecode … [=[response]] uri;  错误页面

模块:ngx_http_core_module

定义错误页,以指定的响应状态码进行响应

可用位置:http, server, location, if in location

error_page 404 /404.html

error_page 404 =200 /404.html  错误状态码改为 200,还是原来的错误页面

Nginx 详解以及 LNMP 的搭建

(12)try_files file … uri;

    try_files file … =code;

按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误

location /images/ {

try_files $uri /images/default.gif;

}

location / {

try_files $uri $uri/index.html $uri.html =404;

}

 Nginx 详解以及 LNMP 的搭建

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p3.htm

一、nginx 介绍

Nginx 详解以及 LNMP 的搭建

1.1 特性:

模块化 设计,较好的扩展性

高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000 个 keep-alive 连接模式下的非活动连接,仅需要 2.5M 内存

event-driven,aio,mmap,sendfile

基本功能:

静态资源的 web 服务器

http 协议 反向代理 服务器,负载均衡

pop3/imap4 协议反向代理服务器

FastCGI(lnmp),uWSGI(Python) 等协议

模块化(非 DSO),如 zip,SSL 模块

web 服务相关的功能:

虚拟主机(server

支持 keep-alive  和管道连接

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于 IP 及用户的访问控制

支持 速率限制 并发数限制

重新配置和 在线升级而无须中断 客户的工作进程

Memcached 的 GET  接口

1.2 nginx 架构

 Nginx 详解以及 LNMP 的搭建 

nginx 的程序架构:

master/worker 结构

一个 master 进程:

负载加载和分析配置文件、管理 worker 进程、平滑升级

 一个或多个 worker 进程

处理并响应用户请求

缓存相关的进程:

cache loader:载入缓存对象

cache manager:管理缓存对象

1.3 nginx 高度模块化

但其模块早期不支持 DSO 机制;1.9.11 版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

• HTTP:模块:ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules  需编译时指定

• Mail  模块 ngx_mail_*

• Stream 块 模块 ngx_stream_*

第三方模块

1.4 nginx 的功用

静态的 web 资源服务器

html,图片,js,css,txt 等静态资源

结合 FastCGI/uWSGI/SCGI 等协议反向代理动态资源请求

http/https 协议的反向代理

imap4/pop3 协议的反向代理

tcp/udp 协议的请求转发(反向代理)

二、nginx 目录结构和命令

2.1 nginx 命令

ls /usr/local/nginx/

html 是测试页,sbin 是主程序

ls /usr/local/nginx/sbin/

nginx  只有一个程序文件

ls /usr/local/nginx/html/

50x.html index.html  测试网页

Nginx:默认为启动 nginx

-h  查看帮助选项

-V  查看版本和配置 选项

-t  测试 nginx 语法错误

-c filename  指定配置文件(default: /etc/nginx/nginx.conf)

-s signal  发送信号给 master 进程,signal 可为:

stop, quit,reopen, reload  示例:-s stop  停止 nginx -s reload  加载配置文件

注意:不要和 systemctl 混合使用

-g directives  在命令行中指明全局指令

2.2 配置文件的组成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi,uwsgi,scgi 等协议相关的配置文件

mime.types:支持的 mime 类型

主配置文件的配置指令:

directive value [value2 …];

注意:

(1)  指令必 须以分号结尾

(2)  支持使用配置变量

内建变量:由 Nginx 模块引入,可直接引用

自定义变量:由用户使用 set 命令定义

set variable_name value;

引用变量:$variable_name

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p2.htm

3.5 定义客户端请求的相关配置

(13)keepalive_timeout timeout [header_timeout];

设定 保持长连接 超时时长,0 表示禁止长连接,默认为 75s

Nginx 详解以及 LNMP 的搭建

(14)keepalive_requests number;

一次长连接上所允许 请求的资源的 最大数量,默认为 100

 

(15)keepalive_disable none | browser …  略,没有那么老版本的浏览器

对哪种浏览器禁用长连接

(16)send_timeout time;

向客户端发送响应报文的超时时长,此处是指 两次写操作之间 的间隔时长,而非整个响应过程的传输时长

(17)client_body_buffer_size size;  缓存,hash 值,取 32 位的后 1 位,2 位,2 位做几级目录

用于接收每个 客户端请求报文、上传 的 body 部分的缓冲区大小;默认为 16k 超出此大小时,其将被暂存到磁盘上的由 client_body_temp_path 指令所定义的位置

(18)client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的 body 部分的临时存储路

径及子目录结构和数量

目录名为 16 进制的数字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 级目录占 1 位 16 进制,即 2^4=16 个目录 0-f

2 级目录占 2 位 16 进制,即 2^8=256 个目录 00-ff

2 级目录占 2 位 16 进制,即 2^8=256 个目录 00-ff

 Nginx 详解以及 LNMP 的搭建

3.6 对客户端进行限制的相关配置

(19)limit_rate rate;  限速

限制响应给客户端的传输速率,单位是 bytes/second,默认值 0 表示不限速

 

(20)limit_except method … {…},仅用于 location,限制客户端使用 除了指定的请求方法之外 的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

}  除了 GET 和 HEAD 之外 其它方法 仅允许 192.168.1.0/24 网段主机

 Nginx 详解以及 LNMP 的搭建

3.7 文件操作优化的配置

(21)aio on | off | threads[=pool]; 是否启用 aio 异步io 功能,异步写磁盘

(22)directio size | off;  是否 同步 (直接) 写磁盘,而非写缓存,在 Linux 主机启用 O_DIRECT 标记,则文件大于等于给定大小时使用,例如 directio 4m

(23)open_file_cache off;

open_file_cache max=N [inactive=time];

nginx 可以缓存以下三种信息:

① 文件 元数据 文件的描述符、文件大小和最近一次的修改时间

打开的目录结构

没有找到的或者没有权限访问的文件的相关信息

max=N:可缓存的 缓存项上限 ;达到上限后会使用LRU(最近最少使用)算法 实现管理

inactive=time:缓存项的 非活动时长 ,在此处 指定的时长内 未被命中的或命中的 次数少于 open_file_cache_min_uses 指令所指定的次数的缓存项 ,即 为非活动项 ,将被删除

(24)open_file_cache_errors on | off;

是否缓存 查找时发生 错误的文件 一类的信息,默认值为 off

(25)open_file_cache_min_uses number;

open_file_cache 指令的 inactive 参数指定的时长内,至少被命中此处指定的次数方可被归类为活动 项,默认值为 1

(26)open_file_cache_valid time;

缓存项有效性的检查频率,默认值为 为 60s

四、重要常用的配置

4.1 权限控制

ngx_http_access_module 模块,实现基于 ip 的访问控制功能

① allow address | CIDR | unix: | all;

② deny address | CIDR | unix: | all;

http, server, location, limit_except 段,都能使用

自上而下检查,一旦匹配,将生效,条件严格的置前

示例:

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

allow 2001:0db8::/32;

deny all;

}

Nginx 详解以及 LNMP 的搭建

4.2 身份验证

ngx_http_auth_basic_module 模块,实现基于用户的访问控制,使用 basic 机制进行用户认证

① auth_basic string | off;

② auth_basic_user_file file;

location /admin/ {

auth_basic “Admin Area”;“提示字”

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

Nginx 详解以及 LNMP 的搭建

用户口令文件:

① 明文文本:格式 name:password:comment

② 加密文本:由 htpasswd 命令实现,httpd-tools 包所提供

Nginx 详解以及 LNMP 的搭建

4.3 状态信息页面

ngx_http_stub_status_module 模块,用于输出 nginx 的基本状态信息

① 设置

Nginx 详解以及 LNMP 的搭建

② 输出信息示例:

Active connections: 291

server accepts handled requests

16630948  16630948  31070465  三个数字分别对应 accepts,handled,requests 三个值

Reading: 6 Writing: 179 Waiting: 106

Nginx 详解以及 LNMP 的搭建

③ 定义

Active connections: 当前状态,活动状态的连接数

accepts:统计总值,已经 接受 的客户端请求的 总数

handled:统计总值,已经 处理 完成的客户端请求的 总数

requests:统计总值,客户端 发来的总的请求数

Reading:当前状态,正在 读取客户端请求报文首部的连接的连接数

Writing:当前状态,正在向客户端发送响应报文过程中的连接数

Waiting:当前状态,正在等待客户端发出请求的空闲连接数

4.4 日志的设置

ngx_http_log_module 模块,指定日志格式记录请求

log_format name string …;  定义日志格式

string 可以使用 nginx 核心模块及其它模块内嵌的变量

② access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];  调用日志

access_log 路径  日志名 ;

访问日志文件路径,格式及相关的缓冲的配置

buffer=size  缓存大小

flush=time  多长时间清除缓存

示例:

log_format compression ‘$remote_addr-$remote_user [$time_local] ‘

‘”$request” $status $bytes_sent ‘

‘”$http_referer” “$http_user_agent” “$gzip_ratio”‘;

access_log /spool/logs/nginx-access.log compression buffer=32k;

Nginx 详解以及 LNMP 的搭建

③ 略:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

缓存各日志文件相关的元数据信息

max:缓存的最大文件描述符数量

min_uses:在 inactive 指定的时长内访问大于等于此值方

可被当作活动项

inactive:非活动时长

valid:验证缓存 中各缓存项是否为活动项的时间间隔

4.5 压缩

ngx_http_gzip_module  用 gzip 方法压缩响应数据,节约带宽,默认没有设置开启

gzip on | off;

启用或禁用 gzip 压缩

gzip_comp_level level;

压缩比由低到高:1 到 9,默认:1

③ gzip_disable regex …;

匹配到客户端浏览器不执行压缩

gzip_min_length length;

启用压缩功能的响应报文大小

⑤ gzip_http_version 1.0 | 1.1;

设定启用压缩功能时,协议的最小版本,默认:1.1

gzip_buffers number size;

支持实现压缩功能时 缓冲区数量 每个缓存区的大小,默认:324k 或 168k

gzip_types mime-type …;

指明仅对 哪些类型 的资源 执行压缩 操作;即压缩过滤器

默认包含有 text/html不用显示指定,否则出错

查看 nginx 的 mime 类型:cat /etc/nginx/mime.types

⑧ gzip_vary on | off;

如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”

⑨ gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;

nginx:对于 代理服务器 请求的响应报文,在何种条件下启用压缩功能

off:对被代理的请求不启用压缩

expired,no-cache, no-store,private:对代理服务器请求的响应报文首部 Cache-Control 值任何一个,启用压缩功能

示例:

gzip on;

gzip_comp_level 6;

gzip_min_length 64;

gzip_proxied any;

gzip_types text/xml text/css application/Javascript;

Nginx 详解以及 LNMP 的搭建

测试压缩效果:

Nginx 详解以及 LNMP 的搭建

4.6 ssl 加密的实现

https ssl 的实现

(1)server 里的选项:

1、ssl on | off;

为指定虚拟机 启用 HTTPS protocol,建议用 listen 指令代替

2、ssl_certificate file;

当前虚拟主机使用 PEM 格式的 证书文件路径

3、ssl_certificate_key file;

当前虚拟主机上与其证书匹配的 私钥文件路径

4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl 协议版本,默认为后三个

5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size]:使用 OpenSSL 内建缓存,为每 worker 进程私有

[shared:name:size]:在各 worker 之间使用一个共享的缓存

6、ssl_session_timeout time;

客户端连接可以复用 ssl session cache 中缓存的 ssl 参数的有效时长,默认 5m

示例:

server {

listen 443 ssl;

server_name www.magedu.com;

root /vhosts/ssl/htdocs;

ssl on;  // 可省略

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

}

Nginx 详解以及 LNMP 的搭建

4.7 地址重写

ngx_http_rewrite_module 模块:

The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.

将用户请求的 URI 基于 PCRE regex 所描述的模式进行检查,而后完成重定向替换

示例:

http://www.magedu.com/hn –> http://www.magedu.com/henan

http://www.magedu.com –> https://www.magedu.com/

(1)rewrite regex replacement [flag]

将用户请求的 URI 基于 regex 所描述的模式进行检查,匹配到时将其替换为 replacement 指定的新的 URI

注意:如果在同一级配置块中存在多个 rewrite 规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查

隐含有循环机制, 但不超过 10 次;如果超过,提示 500 响应码,[flag] 所表示的标志位用于控制此循环机制

如果 replacement 是以 http:// 或 https:// 开头,则替换结果会直接以重向返回给客户端

301:永久重定向  302:临时重定向

Nginx 详解以及 LNMP 的搭建

分析:目录跳转,正则匹配 到 zz 开头的,都永久重定向到 zhengzhou,且 后边的 uri 不变,如:index.html,

[flag]:

① last:重写完成后停止对当前 URI 在当前 location 中后续的其它重写操作,而后对新的 URI 启动新一轮重写检查;提前重启新一轮循环,不建议在 lation 中使用

② break:重写完成后停止对当前 URI 在当前 location 中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在 location 中使用

redirect :临时重定向 ,重写完成后以临时重定向方式直接返回重写后生成的新 URI 给客户端,由客户端重新发起请求;不能以 http:// 或 https:// 开头,使用相对路径, 状态码:302

permanent: 重写完成后以 永久重定向 方式直接返回重写后生成的新 URI 给客户端,由客户端重新发起请求,状态码:301

 

(2)return

return code [text];  例:return 403 “error”;

return code URL;    例:return 302 http://www.baidu.com/;

return URL;            例:return http://www.baidu.com/;

停止处理,并返回给客户端指定的响应码

Nginx 详解以及 LNMP 的搭建

例:连续跳转,image 永久重定向到 img,img 又跳到 www.baidu.com

location /image {

rewrite ^/image/(.*)$   /img/$1 permanent;

}

location /img {

return  http://www.baidu.com/ ;

}

(3)rewrite_log on | off;  把跳转的信息写到日志中

是否开启重写日志,  发送至 error_log(notice level)

(4)set $variable value;

用户自定义变量 ,注意:变量定义和调用都要 以 $ 开头

(5)if (condition) {…}

引入新的上下文, 条件满足时,执行配置块中的配置指令;server, location

condition:

比较操作符:

== 相同

!= 不同

~:模式匹配,区分字符大小写

~*:模式匹配,不区分字符大小写

!~:模式不匹配,区分字符大小写

!~*:模式不匹配,不区分字符大小写

文件及目录存在性判断:

-e, !-e  存在(包括文件,目录,软链接)

-f, !-f 文件

-d, !-d 目录

-x, !-x 执行

实验一:搭建 lnmp 及类小米等商业网站的实现

环境:关闭防火墙,selinux

1、安装包,开启服务

yum -y install nginx mariadb-server php-fpm php-MySQL

systemctl start nginx

systemctl start mariadb

systemctl start php-fpm

2、修改 nginx 的配置文件

cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf  有个模板例子覆盖了配置文件

vim  /etc/nginx/nginx.conf  修改下面几类

① user  nobody;  使用用户

error_log  /var/log/nginx/error.log  info;  错误日志

 

② events {

    worker_connections  65535;   

}

 

③ tcp_nopush    on;    tcp 优化

tcp_nodelay    on;

gzip  on;

 

④ server {

        listen      80;

        server_name  xiaomi.along.com;  根据自己顺便写

        root    /data/web;   主站点的目录根

location / {

            index  index.php index.html index.htm; 

        }

 

⑤ location ~ \.php$ {开启.php,配置文件有例子,只需去掉注释,修改一行即可

            fastcgi_pass  127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

修改完,可以 nginx -t 查看

systemctl restart nginx  重启服务,发现有 warn

ulimit -n  查看 linux 系统里打开文件描述符的最大值,一般缺省值是 1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置 linux 系统里打开文件描述符的最大值

ulimit -n 65535 修改内核参数

3、修改 php-fpm 的配置文件

vim /etc/php.ini  改两行

date.timezone = Asia/Shanghai  时区

short_open_tag = On  允许短标签

 

vim /etc/php-fpm.d/www.conf  改两行

user = nobody

group = nobody

 

systemctl restart php-fpm

4、运行 mysql,创建一会网页需要的库

create database xiaomi;

5、把事先找好的小米网站传进来 rz

mkdir /data/web -p  创建一个目录专门放小米的网页配置

unzip -d /data/web/ xiaomi.zip  解压到目录

cd /data/web/

chown -R nobody.nobody *  为了安全,递归把所有文件的所属人和所属组改为权限有限的 nobody

 

回到顶部

6、网页登录

① 用户:admin

密码:123456

Nginx 详解以及 LNMP 的搭建

② 参数设置:就是连接上自己的数据库

Nginx 详解以及 LNMP 的搭建

也可以在命令行连上自己的数据库:

vim /data/web/data/config.php

Nginx 详解以及 LNMP 的搭建

③ 把数据写到数据库中,恢复数据

Nginx 详解以及 LNMP 的搭建

7、实验成功,登录查看

Nginx 详解以及 LNMP 的搭建

后台登录,可以自己随便修改

http://192.168.30.107/admin

Nginx 详解以及 LNMP 的搭建

8、ab 可以压力测试

实验二:实现 ssl 加密

回到顶部

(1)一个物理服务器设置一个 https

1、创建存放证书的目录

mkdir /etc/nginx/ssl

 

2、自签名证书

cd /etc/pki/tls/certs/

make nginx.crt

Nginx 详解以及 LNMP 的搭建

openssl rsa -in nginx.key -out nginx2.key  因为刚私钥被加密了,为了后边方便,解密 

3、把证书和私钥 cp 到 nginx 存放证书目录

cp nginx.crt nginx2.key /etc/nginx/ssl/

cd /etc/nginx/ssl/

mv nginx2.key nginx.key  把名字改回来

4、修改配置文件,加一段 server

server {

        listen 443 ssl;

        server_name www.along.com;

        ssl on;

        ssl_certificate /etc/nginx/ssl/nginx.crt;

        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_session_cache shared:sslcache:20m;

        ssl_session_timeout 10m;

        }

Nginx 详解以及 LNMP 的搭建 

5、测试,网页打开 https://192.168.30.7/

Nginx 详解以及 LNMP 的搭建

Windows 信任证书

Nginx 详解以及 LNMP 的搭建

(2)一个物理服务器设置多个 https

因为 nginx 强大,可以实现多个虚拟主机基于不同的 FQDN 实现 ssl 加密,httpd 不能实现

1、生成 3 个证书和私钥

make nginx.crt

make nginx2.crt

make nginx3.crt

Nginx 详解以及 LNMP 的搭建 

2、把证书和私钥 cp 到 nginx 存放证书目录,并解开私钥的加密

cp nginx{1,2,3}* /etc/nginx/ssl/

openssl rsa -in nginx.key -out nginx.key

openssl rsa -in nginx2.key -out nginx2.key

openssl rsa -in nginx3.key -out nginx3.key

3、创建各自对应的访问网页

mkdir /app/website{1,2,3}

echo website1 > /app/website1/index.html

echo website1 > /app/website2/index.html

echo website1 > /app/website3/index.html

Nginx 详解以及 LNMP 的搭建 

4、测试访问,成功

client_body_temp_path /var/tmp/client_body 1 2 2

1 级目录占 1 位 16 进制,即 2^4=16 个目录 0-f

2 级目录占 2 位 16 进制,即 2^8=256 个目录 00-ff

3 级目录占 2 位 16 进制,即 即 2^8=256 个目录 00-ff

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148576.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计15367字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中