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.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配置,自己独立写配置。大数据的弊端真不敢恭维。
假欢个人站点:匿名空间
就是希望网络上有一份自己净土,编写如上高质量文章,可供有需要的人学习,欢迎大家前来。
匿名空间原创,如有转载请标注出处 匿名空间