Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Nginx安装配置详解
    • 简介
      • 什么是正向代理
      • 什么是反向代理
    • 安装Nginx
    • 配置文件说明
      • 配置文件结构
      • 1. 全局块
      • 2. events块
      • 3. http块
    • 常用命令
  • Nginx高可用-Nginx+Keepalived
  • Nginx反向代理设置登录密码
  • Nginx配置文件服务器-开启目录浏览功能
  • Nginx配置图片服务器
  • Nginx负载均衡策略详解
  • NginxStream模块介绍
  • NginxStream-配置转发FTP
  • NginxStream-配置转发MySQL
  • Nginx介绍相关文章汇总
  • 《Nginx教程》笔记
Jast-zsh
2022-04-12
目录
简介
什么是正向代理
什么是反向代理
安装Nginx
配置文件说明
配置文件结构
1. 全局块
2. events块
3. http块
常用命令

Nginx安装配置详解

# 简介

# 什么是正向代理

  1. 需要在客户端配置代理服务器进行指定网站访问。比如浏览器配置代理端口访问
  2. Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
    正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访
    问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

# 什么是反向代理

  1. 暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
  2. 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

# 安装Nginx

  • 安装编译工具及库文件

    yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
    
    1
  • 安装PCRE

    PCRE 作用是让 Nginx 支持 Rewrite 功能。

    1. 下载 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
    2. 解压安装包

      [root@bogon src]# tar zxvf pcre-8.35.tar.gz
      
      1
    3. 进入安装包目录

      [root@bogon src]# cd pcre-8.35
      
      1
    4. 编译安装

      [root@bogon pcre-8.35]# ./configure
      [root@bogon pcre-8.35]# make && make install
      
      1
      2
    5. 查看pcre版本

      [root@bogon pcre-8.35]# pcre-config --version
      
      1
  • 安装Nginx

    1. 下载 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
    2. 解压

      tar -zxvf nginx-1.21.5.tar.gz
      
      1
    3. 进入安装目录

      cd nginx-1.21.5
      
      1
    4. 编译安装

      ./configure 
      make && make install
      
      1
      2
    5. 查看安装版本

      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 使用
1
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
}
1
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';
        }
		}
}
1
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>
1
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           
        } 
    }
1
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/;
    } 
1
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
上次更新: 2023/03/10, 16:49:38
Nginx高可用-Nginx+Keepalived

Nginx高可用-Nginx+Keepalived→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式