从零学习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
映射到 内网ip192.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字长文相关推荐
- 一篇文章构建你的 NodeJS 知识体系(W字长文)
作者:RingChenng,原文地址:https://juejin.im/post/6844903767926636558 最近读<重学前端>,开篇就是让你拥有自己的知识体系图谱,后续学的 ...
- Nginx配置文件粗解
为什么80%的码农都做不了架构师?>>> 上一篇搭建了nginx+php基本环境,这一篇专门来学习nginx配置文件,以及怎样让nginx支持php,nginx的配置文件结构类 ...
- 【Nginx源码分析】Nginx配置文件解析(一)
运营研发团队 李乐 配置文件是nginx的基础,对于学习nginx源码甚至开发nginx模块的同学来说更是必须深究.本文将从源码从此深入分析nginx配置文件的解析,配置存储,与配置查找. 看本文之前 ...
- nginx学习简介-安装-启动-命令-nginx配置文件详解
nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...
- 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx
往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...
- 赌你无法坚持看完的nginx配置文件解析
锁屏面试题百日百刷,每个工作日坚持更新面试题.锁屏面试题app.小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage.已收录了每日更新 ...
- ❤️六W字《计算机基础知识》(二)(建议收藏)❤️
上一篇: ❤️六W字<计算机基础知识>(一)❤️ 51. Access是一种____数据库管理系统. A.发散型 B.集中型 C.关系型 D.逻辑型 52. 用高级程序设计语言编写的 ...
- ❤️六W字《计算机基础知识》(一)(建议收藏)❤️
计算机简介: 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量 ...
- nginx配置文件nginx.conf超详细讲解
转载文章:https://www.cnblogs.com/liang-wei/p/5849771.html #nginx进程,一般设置为和cpu核数一样,负载以cpu密集型为主,则设置为与cpu核数相 ...
最新文章
- JavaScript库和API
- NTRIP/ SUPL
- SQL 中 left join、right join、inner join 的区别
- C/C++初学者快速提升?
- 精品家具办公桌椅企业html5官网模板
- 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
- python绝对值函数fabs_Python fabs() 函数
- sift计算描述子代码详解_浅谈SIFT特征描述子
- [BZOJ2502]清理雪道
- Java 获取指定日期的方法汇总
- Mac os 进行Android开发笔记(1)
- 对volatile不具有原子性的理解
- 泛微oa服务器文件,泛微oa云服务器要求
- JavaScript零基础入门 11:JavaScript实现图片上传并预览
- 建筑CAD基础设计【2】
- qq飞车显示服务器维护中,QQ飞车手游更新出现异常怎么办?更新异常原因及解决方法技巧...
- 洛谷每日三题之第四天
- 大学计算机教育国外著名教材系列 数据结构,经典数据结构(Java语言版)(影印版)——大学计算机教育国外著名教材系列...
- 来公司必须了解的编码开发规范
- 通过路由器连接JetsonNano与地面站
热门文章
- 项目日志20190707
- 2011考研数学二第(11)题——第一类曲线积分球弧长
- 计算机怎么更改性能模式,笔记本怎么开高性能模式 让电脑变流畅的方法详细介绍...
- tkinter的一些控件设置——listbox放大字体
- Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络
- 都有哪些南北朝类毕业论文文献呢?
- 记录建hbase对应hive外表坑
- mysql 分数相加_分数求和
- 2分钟实战QQ机器人教程(保姆级)手把手教你极速开发
- CSAPP 第三版 第十章 家庭作业and so on