从零学习Nginx配置文件,呕心沥血w字长文

1 Nginx介绍

1 Nginx基本概念
在这里插入图片描述

可以理解为 nginx 是服务器的软件

1.1 反向代理

**正向代理:**需要在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

在这里插入图片描述

反向代理:反向代理中,客户端只能感知到外界是一体的,感知不到真实目标服务器,代理服务器的作用是转发,在目标服务器这边也一样,目标服务器只能感知到代理服务器。

在这里插入图片描述

1.2 负载均衡

当请求数量一般的时候,单个服务器可以应付的过来。

当数据量达到一定程度,我们通过提高服务器配置的方法,治标不治本,也无法无限制提高,技术也不允许。就当拉车一样,车上货物越来越多,不可能把马换成一个更壮,更有耐力的就可以了,。反而是随着货物越来越多,这已经不现实了。但想到多用几匹马,其实就可以很好的解决。负载均衡也是一个道理。将海量的请求平均分配给多个服务器,有效减少单个服务器压力。
在这里插入图片描述

1.3 动静分离

简单来说,把动态请求和静态请求分离开来,例如,让nginx处理静态请求,tomcat或者其他来处理动态请求。可以配置静态服务器,动态服务器。

目的,有效利用服务器特性,更高效使用。
在这里插入图片描述

2 Nginx安装

2.1 官网下载Nginx

官网 https://nginx.org/
在这里插入图片描述

2.2 安装Nginx依赖

ubuntu 20.4 为例,源码安装请自行搜索其他教程

## libpcre3 libpcre3-dev 依赖
sudo apt-get install libpcre3 libpcre3-dev

## 查看版本号
pcre-config --version
## openssl libssl-dev 依赖
sudo apt-get install openssl libssl-dev
## zlib1g zlib1g-dev 依赖
sudo apt-get install zlib1g zlib1g-dev

在这里插入图片描述

2.3 编译安装

## 解压缩
tar -zxvf nginx-1.20.1.tar.gz

## 移动到 usr/local/src 重命名 nginx 
mv nginx-1.20.1 /usr/local/src/nginx

## nginx 目录所有文件如下
cd /usr/local/src/nginx
ls

在这里插入图片描述

## 编译安装需要make,自行下载
sudo apt-get install make

## --with-http_ssl_module 的意思,是添加https支持,利用系统openssl库
./configure --with-http_ssl_module

## 正常运行后截图如下,三个都支持

在这里插入图片描述

## 编译安装
sudo make && sudo  make install

在这里插入图片描述

## 下图为正常安装结束

在这里插入图片描述

## 按上述步骤安装结束后会在 /usr/local/ 下自动生成nginx文
cd /usr/local/
ls
cd nginx
ls
## 在conf下的就是nginx的配置文件


在这里插入图片描述

:安装nginx的时候不要把解压后的包放在/usr/local/nginx 下,会与nginx自动生成的文件命名冲突,会报错!

## 启动nginx
sudo nginx

## 浏览器访问127.0.0.1或内网地址

## 查看内网地址
ifconfig


在这里插入图片描述

3 常用命令

3.1 查看版本号

nginx -v

在这里插入图片描述

3.2 关闭nginx

sudo nginx -s stop

在这里插入图片描述

3.3 开启nginx

sudo nginx

在这里插入图片描述

3.3 重新加载nginx

sudo nginx -s reload

4 配置文件 1

— 这里是最基础介绍

4.1 配置文件路径

上述安装:/usr/local/nginx/conf/nginx.conf

apt命令安装: /etc/nginx/nginx.conf

4.1 配置文件介绍

打开 /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        ## redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        ## proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        ##    proxy_pass   http://127.0.0.1;
        #}

        ## pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        ##    root           html;
        ##    fastcgi_pass   127.0.0.1:9000;
        ##    fastcgi_index  index.php;
        ##    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        ##    include        fastcgi_params;
        #}

        ## deny access to .htaccess files, if Apache's document root
        ## concurs with nginx's one
        #
        #location ~ /\.ht {
        ##    deny  all;
        #}
    }


    ## another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    ##    listen       8000;
    ##    listen       somename:8080;
    ##    server_name  somename  alias  another.alias;

    ##    location / {
    ##        root   html;
    ##        index  index.html index.htm;
    ##    }
    #}


    ## HTTPS server
    #
    #server {
    ##    listen       443 ssl;
    ##    server_name  localhost;

    ##    ssl_certificate      cert.pem;
    ##    ssl_certificate_key  cert.key;

    ##    ssl_session_cache    shared:SSL:1m;
    ##    ssl_session_timeout  5m;

    ##    ssl_ciphers  HIGH:!aNULL:!MD5;
    ##    ssl_prefer_server_ciphers  on;

    ##    location / {
    ##        root   html;
    ##        index  index.html index.htm;
    ##    }
    #}

}

可以看到大部分都是注释,配置文件一共分为三部分全局块events块http块

4.1.1 全局块

从配置文件开始到 events 块之间的内容,主要会配置一些影响nginx服务器整体运行的配置指令
在这里插入图片描述

比如:worker_processes 1; 这个值越大,可以支持的并发处理量越多

4.1.2 events块

events花括号内的内容,主要影响nginx服务器与用户的网络链接

在这里插入图片描述

比如: worker_connections 1024; 最大连接数

4.1.3 http块

这部分是配置最频繁的块,其中又可以分为两部分,http全局块server块

http全局块

在这里插入图片描述

4 Nginx 配置文件 2

5 Nginx配置:反向代理 基础

5.1 实现效果

浏览器输入 www.jiahuan.com 通过修改host文件,映射到192.168.120.149:80(nginx默认端口),再由nginx转发到127.0.0.1:8080(tomcat默认端口),简单来讲,浏览器输入 www.jiahuan.com 直接跳转到 tomcat 主页
在这里插入图片描述

5.2 环境准备

  • 下载tomcat源码,下载一定不要搞错!!!!是下载core下的文件!
    在这里插入图片描述

在这里插入图片描述

  • 安装tomcat
## 解压缩
tar -zxvf apache-tomcat-8.5.71.tar.gz

## 移动到 /usr/local/src/tomcat
mv apache-tomcat-8.5.71 /usr/local/src/tomcat

## cd 到tomcat的bin目录中
cd /usr/local/src/tomcat/bin

在这里插入图片描述

## 启动
sudo ./startup.sh

## 启动成功如下图,不需要安装

在这里插入图片描述

## 浏览器访问本地8080端口(tomcat默认),可以看到tomcat的界面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 修改host文件,在 /etc/hosts,将域名www.jiahuan.com映射到 内网ip 192.168.120.149

    **域名和ip的映射的寻找规则:**先在本地查找hosts文件,如果hosts文件没有该域名和ip的映射关系,就到网上询问DNS服务器。总结就是:先本地,后网上。

    ## 按对应关系,修改hosts文件
    sudo vim /etc/hosts
    
    ## 最后排加上,一定要加上当前内网ip,wifi只要中间断网了,一定要重新看下ip!
    192.168.151.149 www.jiahuan.com
    

在这里插入图片描述

## 访问www.jiahuan.com:8008可以看到tomcat主页

在这里插入图片描述

5.3 配置nginx

我们想要的是访问www.jiahuan.com 就直接得到tomcat主页,而不是通过:8080,这时需要配置nginx

nginx配置文件:/usr/local/nginx/conf/nginx.conf
在这里插入图片描述

## 修改成如下

server {
        listen       80;
        server_name  192.168.151.149;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://127.0.0.1:8080;
            root   html;
            index  index.html index.htm;
        }

在这里插入图片描述

## 检查nginx.conf是否有语法错误
sudo nginx -t

## 启用nginx
sudo nginx

在这里插入图片描述

## 浏览器访问 www.jiahuan.com !成功!

在这里插入图片描述

5 Nginx配置:反向代理 进阶

5.1 实现效果

访问 http://192.168.151.149:9001/jiahuan/ 	直接跳转到 127.0.0.1:8080
访问 http://192.168.151.149:9001/clay/		直接跳转到 127.0.0.1:8081

5.2 环境准备

5.2.1 准备两个tomcat

— 先将原来的tomcat关掉

将原来的 tomcat 复制成 tomcat8080 tomcat8081
在这里插入图片描述
在这里插入图片描述

  • 8080,使用默认端口,不用做配置

  • 8081,修改默认端口为8081,修改配置文件 server.xml

## 切换root用户,不然进不去配置文件
su root

## 进入/usr/local/src/tomcat8081/conf文件夹,修改server.xml
cd /usr/local/src/tomcat8081/conf
vim server.xml

在这里插入图片描述

## 修改如下几个

在这里插入图片描述
在这里插入图片描述

## 到tomcat8080/bin 启动 8080 ,浏览器访问8080
cd /usr/local/src/tomcat8080/bin
./startup.sh

## 到tomcat8081/bin 启动 8081 ,浏览器访问8081
cd /usr/local/src/tomcat8081/bin
./startup.sh

在这里插入图片描述

在这里插入图片描述

5.2.2 创建测试文件

— tomcat的项目文件在/tomcat8080/webapps下,到该目录创建自定义文件

  • 到8080的webapps ,创建jiahuan文件,在jiahuan文件夹下创建a.html并写入<h1>这里是tomcat8080!</h1>

在这里插入图片描述

在这里插入图片描述

  • 到8081的webapps ,创建clay文件,在clay文件夹下创建a.html并写入<h1>这里是tomcat8081!</h1>

在这里插入图片描述

## 浏览器分别访问  127.0.0.1:8080/jiahuan/a.html 127.0.0.1:8081/clay/a.html 因为编码问题出现乱码,问题不大,能区分就可以

在这里插入图片描述

在这里插入图片描述

5.3 配置nginx

修改/usr/local/nginx/conf/nginx.conf,因为是两个转发,需要两个location块,这里需要重新说明,一个http块可以有多个server块,一个server块,可以有多个location块

server {
        listen       80;
        server_name  192.168.151.149;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~ /jiahuan/ {
            proxy_pass http://127.0.0.1:8080;
        } 
        
		location ~ /clay/ {
            proxy_pass http://127.0.0.1:8081;
        } 
        #error_page  404              /404.html;

        ## redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

在这里插入图片描述

这里需要额外location知识

## 重新加载nginx
nginx -s reload

## 访问 http://192.168.151.149:9001/jiahuan/a.html
## 访问 http://192.168.151.149:9001/clay/a.html


在这里插入图片描述

6 Nginx配置:负载均衡

6.1 实现效果

浏览器输入 http://192.168.151.149/text/a.html ,负载均衡效果,平均给tomcat8080和tomcat8081

6.2 环境准备

6.2.1 准备两个tomcat

— 见反向代理 进阶 环境准备

6.2.2 创建测试文件
  • 在两个tomcat文件中都创建 text 文件夹 新建a.html文件,**分别写入8080!和8081!**如下只演示写入到tomcat8080,8081做法一模一样!

在这里插入图片描述

  • 浏览器访问

在这里插入图片描述
在这里插入图片描述

6.3 配置nginx

  • 在http全局块配置 upstream 来进行负载均衡
upstream myserver{
	server 192.168.151.149:8080;
	server 192.168.151.149:8081;
}

server {
        listen       80;
        server_name  192.168.151.149;
	

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://myserver;
        } 
        #error_page  404              /404.html;

        ## redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

在这里插入图片描述

## 浏览器访问 192.168.151.149/text/a.html
## 可以发现两个出现的频率差不多一致

在这里插入图片描述

在这里插入图片描述

  • 分配策略

    • 轮询(默认)
  #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除掉。
  • weight,权重分配
  ## weight代表权重,默认为1,权重越高被分配的客户端越多。
  ## weight和访问比率成正比,用户后端服务器性能不均的情况,可以使用这个配置。
  
  ## 用法
  upstream myserver {
      	server 123.56.241.139:8080 weight=5;
          server 123.56.241.139:8081 weight=10;
  }
  • ip_hash
  ## 每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题,例如:
  
  ## 用法
  upstream myserver {
          ip_hash;
      	server 123.56.241.139:8080;
          server 123.56.241.139:8081;
  }
  • fair
  ## 按后端服务器的响应时间来分配请求,响应时间短的优先分配,例如:
  
  ## 用法
  upstream myserver {
      	server 123.56.241.139:8080;
          server 123.56.241.139:8081;
          fair;
  }

7 Nginx配置:动静分离

在这里插入图片描述

7.1 实现效果

静态资源直接由nginx访问,动态资源由tomcat处理

7.2 环境准备

  • 在根目录创建/data/image 文件夹,放置一张图片,做静态资源库
  cd /
  sudo mkdir -p /data/image
  
  ## 自己复制一张图片到这里,这里我重命名成1.jpg
  sudo cp ~/图片/森林\ 夜晚\ ¹\ 月亮\ 唯美意境4k壁纸3840x2160_彼岸图网.jpg 1.jpg

在这里插入图片描述

  • 在根目录创建/data/www 文件夹,放置1.html,写入 <h1>Tomcat</h1>
    在这里插入图片描述

7.3 配置Nginx

server {
        listen       80;
        server_name  192.168.148.149;
	

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /www/ {
			root /data/;
        }

		location /image/{
            root /data/;
            autoindex on;
		} 
        #error_page  404              /404.html;

        ## redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

在这里插入图片描述

  • 效果

    ## 启动nginx
    sudo nginx
    
    ## 浏览器访问 http://192.168.148.149/image/1.jpg 和 http://192.168.148.149/www/1.html
    

在这里插入图片描述

在这里插入图片描述

autoindex on的效果,建议不开

在这里插入图片描述

这边暂时先略,博主学过的基础配置全在这里了

8 写在最后

我不知道你有没有这样体验,就以我为例我为了云端 Nginx+Django部署个人站点,翻看N个文章,资料,但大大小小花了小一周的时间,仍然没有一篇文章能够帮我解决!

网络上海量的资料,给我提供参考便利的同时,也差点把我们淹死。各种空而虚的标题党,一知半解还一股指定江山的味,动不动还要付费,心态几近搞炸,这篇Nginx的配置文件学习记录笔记,也是真的没办法,本来只需要复制拷贝部署上去就可以的事,到头来还是从零开始学Nginx uwsgi配置,自己独立写配置。大数据的弊端真不敢恭维。

假欢个人站点:匿名空间

就是希望网络上有一份自己净土,编写如上高质量文章,可供有需要的人学习,欢迎大家前来。

匿名空间原创,如有转载请标注出处 匿名空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值