2022Nginx实战教程,由浅入深,图文详解

简介: Nginx

1、简单小栗子

我们先实现一个小目标,完成一个最简单的反向代理。

打开nginx.conf文件,添加upstream,以及在location中添加proxy_pass

upstream 主要是配置均衡池和调度方法
proxy_pass 主要是配置代理服务器ip或服务器组的名字

修改配置后需要重启nginx,如此当我们请求http://localhost:80/hellonginx/时会得到test接口的返回值

test接口是从nacos动态配置获取用户名的值

2、负载均衡详解

先说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法

2.1热备

比如我们把应用部署在两个服务器上,平时只使用A,当A挂了才启用B

#设定实际的服务器列表

upstream myServe {

   server 192.168.24.11:8082;

   server 192.168.24.12:8082 backup; #热备

}

2.2普通轮询

#设定实际的服务器列表

upstream myServe {

   server 192.168.24.11:8082;

   server 192.168.24.12:8082;

}

   server {

       listen       80;

       server_name  localhost;

#反向代理的路径(和upstream绑定),location 后面设置映射的路径

       location /hellonginx/ {

           root   html;

           index  index.html index.htm;

   proxy_pass http://myServe/test;

       }

服务器列表配置A、B俩台服务器,此时会进行简单的轮询,也就是服务器处理请求的顺序为:ABAB......

2.3加权轮询

跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。

upstream myServe {

   server 192.168.24.11:8082 weight=2;

   server 192.168.24.12:8082 weight=1;

}

此时服务器请求顺序为:AABAAB......

2.4 ip_hash

nginx的ip_hash算法是取ip地址的前三段数字进行hash映射,这样做是为了让来自同一个地区的请求落在一个后台服务上。

upstream myServe {

   server 192.168.24.11:8082;

   server 192.168.25.12:8082;

   ip_hash;

}

2.5状态参数

  • down,表示当前的server暂时不参与负载均衡。
  • backup,热备。当其他所有的非backup服务挂了,才会请求backup机器。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

默认:fail_timeout为10s,max_fails为1次。

upstream myServe {

   server 192.168.24.11:8082 weight=2 max_fails=2 fail_timeout=2;

   server 192.168.24.12:8082 weight=1 max_fails=2 fail_timeout=1;

}

如果此时有一台服务器挂了,那么nginx服务器分发请求还是会给不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,直到我们的响应时间超时,才会把请求重新分发给其他服务器,这里的响应时间如果过长,用户等待的时间就会越长。所以这里会有一些很重要的配置

  • proxy_connect_timeout 1;   #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
  • proxy_read_timeout 1;#nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
  • proxy_send_timeout 1;#nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
  • proxy_ignore_client_abort on;  #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。

3、多个webapp配置

比如www.hellonginx.com 站点有好几个 webapp,quote(报价)、contract(合同)、budget(预算)。访问这些应用的方式通过上下文(context)来进行区分:

www.hellonginx.com/quote/

www.hellonginx.com/contract/

www.hellonginx.com/budget/

这三个应用需要分别绑定不同的端口号。而用户在实际访问 www.hellonginx.com 站点时,访问不同 webapp不会带着不同的端口号,配置也不难,来看看怎么做吧:

http {

 # 此处省略一些基本配置


 upstream quote_server {

   server www.hellonginx.com:8081;

 }


 upstream contract_server {

   server www.hellonginx.com:8082;

 }


 upstream budget_server {

   server www.hellonginx.com:8083;

 }


 server {

   # 此处省略一些基本配置

   # 默认指向quote的server

   location / {

     proxy_pass http://quote_server;

   }


   location /quote/ {

     proxy_pass http://quote_server;

   }


   location /contract/ {

     proxy_pass http://contract_server;

   }


   location /budget/ {

     proxy_pass http://budget_server;

   }

 }

}


4、https配置

https是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。https的安全基础是 ssl,因此加密的详细内容就需要 ssl,所以在 nginx.conf 中你需要指定证书和它对应的 key 其他和 http 反向代理基本一样,只是在 Server 部分配置有些不同。

# HTTPS server

server {

 # 监听443端口。443为知名端口号,主要用于HTTPS协议

 listen 443 ssl;

 # 定义使用www.xx.com访问

 server_name www.hellonginx.com;

 # ssl证书文件位置(常见证书文件格式为:crt/pem)

 ssl_certificate cert.pem;

 # ssl证书key位置

 ssl_certificate_key cert.key;

 # ssl配置参数(选择性配置)

 ssl_session_cache shared:SSL:1m;

 ssl_session_timeout 5m;

 # 数字签名,此处使用MD5

 ssl_ciphers HIGH:!aNULL:!MD5;

 ssl_prefer_server_ciphers on;

 location / {

   root /root;

   index index.html index.htm;

 }

}

5、静态站点配置

我这里用的windows,反正道理都是一样的

在static文件夹下新建了index.html和images文件夹,然后随便放张图片进去。

   server {

       listen       80;

       server_name  localhost;

location / {

 root D:/static/;

 index  index.html index.htm; #设置默认首页

}

}

这样当我们请求时,会显示默认首页,等同于D:/static/index.html

location /images/ {

 alias  D:/static/images/;

 #autoindex on;

}

看到图片就可以了。

我们看见上面配置中注释了autoindex on,来看一下有啥效果,当我们请求不具体到某张图片时

Nginx默认是不允许列出整个目录的,打开后的效果

6、搭建文件服务器

有时候,团队需要归档一些数据或资料,那么文件服务器必不可少。使用 Nginx 可以非常快速便捷的搭建一个简易的文件服务。

Nginx 中的配置要点:

  • 将 autoindex 开启可以显示目录,默认不开启。
  • 将 autoindex_exact_size 开启可以显示文件的大小。默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
  • 将 autoindex_localtime 开启可以显示文件的修改时间。默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。
  • root 用来设置开放为文件服务的根路径。
  • charset 设置为 charset utf-8,gbk;,可以避免中文乱码问题(windows 服务器下设置后,依然乱码,本人暂时没有找到解决方法)。

一个最简化的配置如下:

# 显示目录

autoindex on;

# 显示文件大小

autoindex_exact_size on;

# 显示文件时间

autoindex_localtime on;

server {

 # windows 服务器下设置后,依然乱码,暂时无解

 charset utf-8,gbk;

 listen 9050 default_server;

 listen [::]:9050 default_server;

 server_name _;

 root /share/fs;

}

相关文章
|
6月前
|
运维 监控 应用服务中间件
LNMP详解(十五)——Nginx日志分析实战
LNMP详解(十五)——Nginx日志分析实战
72 0
|
6月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
196 1
|
23天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
213 0
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
27天前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
62 0
Mac os 安装 nginx 教程(success)
|
1月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
4月前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
195 10
|
4月前
|
应用服务中间件 Linux 网络安全
nginx安装的详细教程(包括命令行安装和编译安装)
nginx安装的详细教程(包括命令行安装和编译安装)
|
5月前
|
安全 Ubuntu 应用服务中间件
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
571 3
|
5月前
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
506 1