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

Nginx详解以及LNMP的搭建

519次阅读
没有评论

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7971326
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...