目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx windows esp32 git docker idea maven esp8266 python Arduino

存档:

X

[ Nginx ] 配置相关说明

Nginx 配置其实很简单,只要掌握些规律和记住配置就行。我也是在犀利胡同中摸到了门路。

图1

图2

看过上面的图大体可以知道结构,自己的配置需要放入 server 中,我们也可以将它单独抽出一个文件来。

nginx.confhttp 下面有这样一句话

include /etc/nginx/conf.d/*.conf;

导入所有conf.d下的文件,可以通过复制 配置文件修改端口或资源的监听路径来实现快速配置。

配置文件

主配置文件 nginx.conf

网站文件 snapdrop.conf

下面详细说明

2、编译与安装

安装环境准备:

(1)linux 内核2.6及以上版本:

只有2.6之后才支持epool ,在此之前使用select或pool多路复用的IO模型,无法解决高并发压力的问题。通过命令uname -a 即可查看。

#查看 linux 内核

uname -a

(2)GCC编译器

GCC(GNU Compiler Collection)可用来编译C语言程序。Nginx不会直接提供二进制可执行程序,只能下载源码进行编译。

(3)PCRE库

PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。

(4)zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量。

(5)OpenSSL开发库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

上面几个库都是Nginx 基础功能所必需的,为简单起见我们可以通过yum 命令统一安装。

#yum 安装nginx 环境

yum -y install make zlib zlib-devel gcc-c++ libtool
openssl openssl-devel pcre pcre-devel

源码获取:

nginx 下载页:http://nginx.org/en/download.html

下载nginx 最新稳定版本

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

#解压

tar -zxvf nginx-1.14.0.tar.gz

最简单的安装:

全部采用默认安装

./configure && make && make
install

执行完成之后 nginx 运行文件 就会被安装在
/usr/local/nginx 下。

基于参数构建

./configure

模块更新:

添加状态查查看等其它模块

./configure --with-pcre --with-http_stub_status_module
--with-http_ssl_module

重新创建主文件

make

将新生成的nginx 文件覆盖 旧文件。

cp objs/nginx /usr/local/nginx/sbin/

查看是否更新成功 显示了

configure 构建参数表示成功

/usr/local/nginx/sbin/nginx -V

控制命令:

#查看命令帮助

./sbin/nginx -?

#默认方式启动:

./sbin/nginx

#指定配置文件启动

./sbing/nginx -c /tmp/nginx.conf

#指定nginx程序目录启动

./sbin/nginx -p /usr/local/nginx/

#快速停止

./sbin/nginx -s stop

#优雅停止

./sbin/nginx -s quit

热装载配置文件

./sbin/nginx -s reload

重新打开日志文件

./sbin/nginx -s reopen

设置全局命令,如下表示设置启动用户为root

./sbin/nginx -g "user root;"

模块更新:

二、Nginx 架构说明

Nginx 架构图:

图片

架构说明:

1)nginx启动时,会生 不处理网络请求,主要负责调度工作进程,也就是图示的三项:加载配置、启动工作进程及非停升级。所以,nginx启动以后,查看操作系统的进程列表,我们就能看到至少有两个nginx进程。

2)服务器实际处理网络请求及响应的是工作进程(worker),在类unix系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求。

3)模块化设计。nginx的worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。

4)事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports。

Nginx 核心模块:

图片

三、Nginx 配置与使用

知识点

配置文件语法格式

配置第一个静态WEB服务

配置案例

a.
动静分离实现

b.
防盗链

c.
多域名站点

d.
下载限速

e.
IP 黑名单

f.
基于user-agent分流

日志配置

1、配置文件的语法格式:

先来看一个简单的nginx 配置

worker_processes
1;

events {

worker_connections 1024;
}

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;

}



location

/nginx_status {

stub_status on;

access_log off;

 }

}
}

上述配置中的events、http、server、location、upstream等属于配置项块。而worker_processes 、worker_connections、include、listen 属于配置项块中的属性。 /nginx_status 属于配置块的特定参数参数。其中server块嵌套于http块,其可以直接继承访问Http块当中的参数。

配置块名称开头用大口号包裹其对应属性
属性基于空格切分属性名与属性值,属性值可能有多个项 都以空格进行切分 如: access_log logs/host.access.log main
参数其配置在 块名称与大括号间,其值如果有多个也是通过空格进行拆

注意 如果配置项值中包括语法符号,比如空格符,那么需要使用单引号或双引号括住配置项值,否则Nginx会报语法错误。例如:

log_format main
'$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer"

'

'"$http_user_agent" "$http_x_forwarded_for"';

2、配置第一个静态WEB服务

基础站点演示:

l 创建站点目录 mkdir -p /usr/www/luban

l 编写静态文件

l 配置 nginx.conf

n 配置server

n 配置location

基本配置介绍说明:

(1)监听端口

语法:listen address:

默认:listen 80;

配置块:server

(2)主机名称

语法:server_name name[……];

默认:server_name "";

配置块:server

server_name后可以跟多个主机名称,如server_name
www.testweb.com、download.testweb.com;。 支持通配符与正则

(3)location

语法:location[=|~|~*|^~|@]/uri/{……}

配置块:server

=表示把URI作为字符串,以便与参数中的uri做完全匹配。

/ 基于uri目录匹配

~表示正则匹配URI时是字母大小写敏感的。

~*表示正则匹配URI时忽略字母大小写问题。

^~表示正则匹配URI时只需要其前半部分与uri参数匹配即可。

匹配优先规则:

精确匹配优先 =

正则匹配优先 ^~

前缀最大匹配优先。

配置靠前优化

(4)root 指定站点根目录

可配置在 server与location中,基于ROOT路径+URL中路径去寻找指定文件。

(5)alias 指定站点别名

只能配置location 中。基于alias 路径+ URL移除location 前缀后的路径来寻找文件。

如下示例:

location /V1 {

alias /www/old_site;

index index.html
index.htm;

}

#防问规则如下

URL:http://xxx:xx/V1/a.html

最终寻址:/www/old_site/a.thml

动静分离演示:

l 创建静态站点

l 配置 location /static

l 配置 ~* .(gif|png|css|js)$

基于目录动静分离

server {

listen 80;



server_name

*.luban.com;

root /usr/www/luban;



location / {

index luban.html;

}



location /static {



 alias

/usr/www/static;

}

}

基于正则动静分离

location ~* .(gif|jpg|png|css|js)$ {

root /usr/www/static;
}

防盗链配置演示:

加入至指定location 即可实现

valid_referers none blocked *.luban.com;

if ($invalid_referer) {

return 403;
}

下载限速:

location /download {

limit_rate 1m; //限制每S下载速度
limit_rate_after 30m; // 超过30 之 后在下载

}

创建IP黑名单

#封禁指定IP

deny 192.168.0.1;

allow 192.168.0.1;

#开放指定IP 段

allow 192.168.0.0/24;

#封禁所有

deny all;

#开放所有

allow all;

创建黑名单文件

echo 'deny 192.168.0.132;' >> balck.ip

#http 配置块中引入 黑名单文件

include black.ip;

3、日志配置:

日志格式:

log_format main '$remote_addr -
$remote_user [$time_local]
"$request" '

'$status $body_bytes_sent "$http_referer"

'

'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;

#基于域名打印日志

access_log logs/$host.access.log main;

error日志的设置

语法:error_log /path/file level;

默认:error_log logs/error.log error;

level是日志的输出级别,取值范围是debug、info、notice、warn、error、crit、alert、emerg,

针对指定的客户端输出debug级别的日志

语法:debug_connection[IP|CIDR]

events {
    debug_connection
    192.168.0.147;
  
    debug_connection
    10.224.57.0/200;
}

注意:debug 日志开启 必须在安装时 添加 --with-debug (允许debug)

nginx.conf

第一课Nginx核心模块与配置实践.docx


标题:[ Nginx ] 配置相关说明
作者:llilei
地址:http://solo.llilei.work/articles/2023/04/22/1682168809710.html