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.jpgsudo 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配置,自己独立写配置。大数据的弊端真不敢恭维。

假欢个人站点:匿名空间

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

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

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

  1. 一篇文章构建你的 NodeJS 知识体系(W字长文)

    作者:RingChenng,原文地址:https://juejin.im/post/6844903767926636558 最近读<重学前端>,开篇就是让你拥有自己的知识体系图谱,后续学的 ...

  2. Nginx配置文件粗解

    为什么80%的码农都做不了架构师?>>>    上一篇搭建了nginx+php基本环境,这一篇专门来学习nginx配置文件,以及怎样让nginx支持php,nginx的配置文件结构类 ...

  3. 【Nginx源码分析】Nginx配置文件解析(一)

    运营研发团队 李乐 配置文件是nginx的基础,对于学习nginx源码甚至开发nginx模块的同学来说更是必须深究.本文将从源码从此深入分析nginx配置文件的解析,配置存储,与配置查找. 看本文之前 ...

  4. nginx学习简介-安装-启动-命令-nginx配置文件详解

    nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...

  5. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...

  6. 赌你无法坚持看完的nginx配置文件解析

    锁屏面试题百日百刷,每个工作日坚持更新面试题.锁屏面试题app.小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage.已收录了每日更新 ...

  7. ❤️六W字《计算机基础知识》(二)(建议收藏)❤️

    上一篇: ❤️六W字<计算机基础知识>(一)❤️  51. Access是一种____数据库管理系统. A.发散型 B.集中型  C.关系型  D.逻辑型 52. 用高级程序设计语言编写的 ...

  8. ❤️六W字《计算机基础知识》(一)(建议收藏)❤️

    计算机简介:         计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量 ...

  9. nginx配置文件nginx.conf超详细讲解

    转载文章:https://www.cnblogs.com/liang-wei/p/5849771.html #nginx进程,一般设置为和cpu核数一样,负载以cpu密集型为主,则设置为与cpu核数相 ...

最新文章

  1. JavaScript库和API
  2. NTRIP/ SUPL
  3. SQL 中 left join、right join、inner join 的区别
  4. C/C++初学者快速提升?
  5. 精品家具办公桌椅企业html5官网模板
  6. 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
  7. python绝对值函数fabs_Python fabs() 函数
  8. sift计算描述子代码详解_浅谈SIFT特征描述子
  9. [BZOJ2502]清理雪道
  10. Java 获取指定日期的方法汇总
  11. Mac os 进行Android开发笔记(1)
  12. 对volatile不具有原子性的理解
  13. 泛微oa服务器文件,泛微oa云服务器要求
  14. JavaScript零基础入门 11:JavaScript实现图片上传并预览
  15. 建筑CAD基础设计【2】
  16. qq飞车显示服务器维护中,QQ飞车手游更新出现异常怎么办?更新异常原因及解决方法技巧...
  17. 洛谷每日三题之第四天
  18. 大学计算机教育国外著名教材系列 数据结构,经典数据结构(Java语言版)(影印版)——大学计算机教育国外著名教材系列...
  19. 来公司必须了解的编码开发规范
  20. 通过路由器连接JetsonNano与地面站

热门文章

  1. 项目日志20190707
  2. 2011考研数学二第(11)题——第一类曲线积分球弧长
  3. 计算机怎么更改性能模式,笔记本怎么开高性能模式 让电脑变流畅的方法详细介绍...
  4. tkinter的一些控件设置——listbox放大字体
  5. Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络
  6. 都有哪些南北朝类毕业论文文献呢?
  7. 记录建hbase对应hive外表坑
  8. mysql 分数相加_分数求和
  9. 2分钟实战QQ机器人教程(保姆级)手把手教你极速开发
  10. CSAPP 第三版 第十章 家庭作业and so on