Nginx安装配置详解
# 简介
# 什么是正向代理
- 需要在客户端配置代理服务器进行指定网站访问。比如浏览器配置代理端口访问
- Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访
问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
# 什么是反向代理
- 暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
- 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
# 安装Nginx
安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
1安装PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@bogon src]# cd /usr/local/src/ [root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
1
2解压安装包
[root@bogon src]# tar zxvf pcre-8.35.tar.gz
1进入安装包目录
[root@bogon src]# cd pcre-8.35
1编译安装
[root@bogon pcre-8.35]# ./configure [root@bogon pcre-8.35]# make && make install
1
2查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
1
安装Nginx
下载 Nginx,下载地址:https://nginx.org/en/download.html
[root@bogon src]# cd /usr/local/src/ [root@bogon src]# wget https://nginx.org/download/nginx-1.21.5.tar.gz
1
2解压
tar -zxvf nginx-1.21.5.tar.gz
1进入安装目录
cd nginx-1.21.5
1编译安装
./configure make && make install
1
2查看安装版本
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx nginx -v
1
2
# 配置文件说明
# 配置文件结构
# 1. 全局块
配置文件最开始到events之间的内容,主要设置Nginx服务整体运行的配置指令,一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
# 配置运行Nginx服务器的用户和用户组 - user
# 格式:user user [group];
# user,指定可以运行Nginx服务器的用户。
# group,可选项,指定可以运行Nginx服务器的用户组
# 希望所有用户都可以启动Nginx进程,1.注释掉该行 2.将用户和用户组设置为nobody:user nobody nobody;
user root;
# Nginx 工作进程数 ,提升该值可以提升Nginx性能
# 格式:worker_processes number | auto;
# number,指定Nginx进程最多可以产生的worker process数量
# auto,Nginx进程自动检测
# 一般情况下设置1个就够了,根据实际业务场景可以动态调整,一般情况下这个值小于等于CPU核数
worker_processes 1;
# Nginx进程的PID存放路径,默认存储在Nginx目录下logs目录
pid logs/nginx.pid;
# 全局错误日志的存放路径
# 格式:error_log file | stderr [level];
# 日志级别由低到高为debug,info,notice,warn,error,crit,alert,emerg,生产场景一般是 warn | error | crit 这三个级别之一
# 可以配置在main、http、server、location段里。
# 如果在配置文件中定义了两个error_log,在同一个配置段里的话会产生冲突,所以同一个段里只允许配置一个error_log。
# 如果要想彻底关闭error_log,需要这样配置:error_log /dev/null;
error_log logs/error.log info;
#
//TODO include 使用
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 2. events块
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
2
3
4
5
6
# 3. http块
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- 全局块
http {
#----------------------------gzip----------------------------
#开启gzip压缩,降低传输流量
gzip on; # 开启Gzip
gzip_min_length 1k; # 不压缩临界值,大于1K的才压缩,一般不用改
gzip_buffers 4 16k; #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.1; # 一般不用设置,默认就是1.1
gzip_comp_level 2; # 压缩级别,1-10,数字越大压缩的越好,时间也越长
# 进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/javascript;
gzip_vary on; # 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_disable "MSIE [1-6]\."; #IE6支持不好,禁用gzip
#----------------------------gzip----------------------------
include mime.types; #文件扩展名与文件类型映射表
include /usr/local/nginx/conf/*.conf; # 加载执行目录下的多个conf文件,子配置是从server块开始编写
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
error_page 500 502 503 504 /50x.html; # 错误状态码显示页面
error_page 404 /404.html; # 错误状态码显示页面
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
server {
listen 8080;
server_name localhost;
location = /test {
default_type text/html;
return 200 'good';
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
然后在/usr/share/nginx/html
目录下面新建一个404.html文件,终端输入vim 404.html,并写入以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 Not Found</title>
</head>
<body>
<h1 style="text-align: center;">非常抱歉!没有找到哟!</h1>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
- server块
配置虚拟主机的相关参数,一个http中可以有多个server。
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name localhost; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
2
3
4
5
6
7
8
9
10
11
12
location块
https://zhuanlan.zhihu.com/p/130819099
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20优先级规则 (=)的优先级最高 匹配(^~)优先级次之。不支持正则表达式。如果有多个location匹配的话,则使用表达式最长的那个 正则表达式类型(~ ~*)的优先级次之 常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个 说明 精准匹配,有匹配项,返回结果,结束解析。 前缀匹配,有匹配项,选择最长,返回结果,结束解析。 正则匹配,按正则表达式顺序为准,由上至下一旦匹配成功,返回结果,结束解析 若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果
location
是否以/结尾的区别location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
1
2
3
4
5
6
7- localtion结尾处有/时,访问/user会301重定向到/user/
- localtion结尾处无/时,访问/user不重定向
proxy_pass
的值是否以/结尾
location /ttt {
proxy_pass http://codeper.exwechat.com/;
}
location /ttt2/{
proxy_pass http://codeper.exwechat.com/;
}
2
3
4
5
6
7
- proxy_pass尾处有/时, 实际请求的url过滤location
- proxy_pass尾处无/时, 实际请求的url包含location
配置请求的路由,以及各种页面的处理情况。
# 常用命令
启动
nginx -c 配置文件路径
1重新加载
nginx -s reload
1重启Nginx
nginx -s reopen
1停止Nginx
nginx -s stop
1