Nginx配置服务、代理、负载均衡方法介绍

本文详细介绍了如何在Windows上安装和配置Nginx,包括http和https服务、代理设置、负载均衡,适合运维人员快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因知识水平有限,见解都比较粗浅,仅供道友参考。

 目录

关于Nginx

获取Nginx

安装 Nginx

使用Nginx

1、启动

2、停止、重载

配置Nginx 

1、配置http服务。

2、配置https服务。

3、代理

4、负载均衡

结语


关于Nginx

nginx [engine x] 是一个 HTTP 和反向代理服务器、一个邮件代理服务器和一个通用的 TCP/UDP 代理服务器,最初lgor Sysoev设计开发的一个Web服务器。Nginx功能丰富,可作为HTTP服务器,邮件代理服务器、TCP/UDP代理服务器。nginx采用C语言编写,目前是开源的,其特点是占有内存少,并发能力强。支持FreeBSD、Linux、Solaris、AIX HP-UX、macOS、Windows等操作系统。作为一名运维/实施人员,安装部署应用系统是一项常用技能,所以本文从“配置”的角度来介绍nginx,更多的关注是如何配置程序,不关注源码本身。

获取Nginx

建议从官方网站获取相关程序(nginx: download),nginx-1.21.0的.gz文件包含C源码,有兴趣可以阅读并自行编译。本文的操作全部在Windows10下进行,其他操作系统的对于nginx的操作也类似。

安装 Nginx

由于安装方法因操作系统而异,本人使用经验有限,所以直接引用官网的安装说明(Installing nginx英文版本)。这里说一下Windows版本的包,下载下来的就是编译好的程序,可以直接使用(以cmd命令行的方式去运行nginx.exe)。为了方便使用,可以将程序所在文件夹的路径添加到Windows环境变量的path变量里面,如不添加,需要在使用命令前切换到此目录下。

使用Nginx

1、启动

初次获取程序后,先不修改配置文件,在Windows下通过start nginx命令启动。

d:
cd d:\nginx-1.21.0
start nginx

如果启动成功,用浏览器访问http://127.0.0.1:80/,会出现以下页面,这是nginx默认的http sever启动成功的标志。

如果启动失败,需要查阅logs\error.log,查看失败原因。首次启动失败原因多是因为80端口号被占用,所以需要找到占用80端口号的程序并关闭,若不能关闭占用程序,则需要修改nginx默认http sever的端口号。具体可以参考配置文件介绍这块。

2、停止、重载

可以通过以下命令停止、重载nginx。

nginx -s stop	快速停止。
nginx -s quit	正常停止。
nginx -s reload	修改配置后,根据新的配置重启一个进程,关闭旧进程。可以理解为刷新配置后重启。
nginx -s reopen	重新打开日志文件。

配置Nginx 

nginx最重要的配置文件应该就是conf/nginx.conf

1、配置http服务。

这里在nginx.conf中添加一个sever节点来创建http服务。http sever的结构如下,父节点是http,子节点是sever,sever可以有若干个。

http {
    server {
    }
}

例子1:发布一个静态网页

	server{
	    listen       8099;
        server_name  localhost;
		
		location / {
            root   html/cjbhf;
            index  中华人民共和国长江保护法.html;
        }
	}

项目路径:

 

发布结果:

 例子2:使用8099端口发布一个静态网页和一个文件服务器

nginx默认是禁止访问目录的。所以在第一个location配置中,只能通过具体的URL来访问资源。以下是效果图:

不可以通过url访问到test文件夹下的内容。 

可以通过url访问到test/index.html。 

作为非测试环境、或者是特定局域网内文件共享等特定场景,需要构建一个简单的http文件服务器,可以使用下面的location配置,需要注意的是location后面的路径需要在root后配置的路径中实际存在。在本文中就是要在location后面写pic就必须存在E:/picture/pic这个路径。

	server{
	    listen       8099;
        server_name  localhost;
		
		location / {
            root   html/cjbhf;
            index  中华人民共和国长江保护法.html;
        }

		location /pic/ {
            root   E:/picture;
			autoindex on; # 开启目录文件列表
			autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
			autoindex_localtime on; # 显示的文件时间为文件的服务器时间
			charset utf-8,gbk; # 避免中文乱码
        }
	}

效果图如下:

2、配置https服务。

https协议可以理解为加密了的http,目前多数互联网站点都是采用https协议,相对于http更加安全,过程也相对复杂。仅从安装部署的角度来说,https与http的区别主要在于https需要使用CA证书。如果是练习的话,可以使用OpenSSL(/index.html (openssl.org))来自签证书,供nginx使用。本文只简单介绍一下配置文件,后续可能会介绍OpenSSL签发CA证书的方法。

server {
        listen       9790 ssl;
        server_name  localhost;

        ssl_certificate      cert\mysert.crt;
        ssl_certificate_key  cert\mycert.key;

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

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        
        location / {
            root   html/cjbhf;
            index  中华人民共和国长江保护法.html;
        }
    }

在conf文件中找到 HTTPS server字样,反注释掉sever语句块。

ssl_certificate后填写根证书相对nginx.conf的路径,ssl_certificate_key填写私钥文件的相对路径。

ssl_session_cache    shared:SSL:1m; 设置会话存储为1兆

ssl_session_timeout  5m;设置缓存超时为5分钟

以上两个配置是为了提高效率,减少https服务对服务器CPU资源的消耗。

ssl_ciphers  HIGH:!aNULL:!MD5;  SSL 密码为“ HIGH:!aNULL:!MD5”。

 证书是个“假的”,所以这里显示是不安全。

3、代理

代理是nginx一项重要的功能。能够提供配置灵活的转发功能。我们可以将代理形象理解为nginx将收到的A的请求报文转发给B,然后将B的响应报文转发给A,A和B都只同nginx直接进行了交互。正向代理可以理解为将客户端代理出局域网,反向代理则是将服务端代理出局域网,代理多应用于客户端和服务端之间无法直接交互的情况。

以下分别是一个简单的http服务的代理和https的反向代理。

	server{
        listen       8099;
        server_name  localhost;

        location /en/ {
            proxy_pass http://nginx.org/;
		}
	}

	server{
        listen       9790;
        server_name  localhost;

        ssl_certificate      cert\mysert.crt;
        ssl_certificate_key  cert\mycert.key;

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

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

        location /MyCSDN/ {
		  proxy_pass https://www.baidu.com/;
        }
	}

正向代理的简单例子

server {
    listen       8099;
    server_name  localhost;

    resolver 8.8.8.8;
    location / {
        proxy_pass http://$http_host$request_uri;
    }

}

以上例子可以通过添加多个location实现一个sever代理多个url对应的服务。

4、负载均衡

负载均衡是nginx将接受到的流量再次转发至多个服务的行为,nginx 中的反向代理实现包括 HTTP、HTTPS、FastCGI、uwsgi、SCGI、memcached 和 gRPC 的负载均衡。它在Web项目是一项非常重要的工作,对于业务繁忙的业务系统,有必要使用多个一样的服务支持同样的、大量的请求。这样可以保障业务的不间断性,即使其中某个服务出现故障,其他的服务也可以支持请求继续下去。

这里介绍一下http服务负载均衡的配置,它的实现方法包括循环法、最少连接法、ip-hash法、权重法等。

要使用负载均衡,首先需要使用upstream指令,在upstream中指定多个sever(可以是域名或ip+端口),然后使用upstream的名称设置为proxy_pass的值。

循环法(默认由nginx分配具体转发到哪个sever)

http {
    upstream url1 {
        server 192.168.0.1:80;
        server 192.168.0.1:7090;
        server 192.168.0.2:8081;
    }

    server {
        listen 8099;

        location / {
            proxy_pass http://url1;
        }
    }
}

最少连接法

nginx尽量将新请求分发到不太繁忙的服务器,从而避免繁忙服务器过载。

http {
    upstream url1 {
        least_conn;
        server 192.168.0.1:80;
        server 192.168.0.1:7090;
        server 192.168.0.2:8081;
    }

    server {
        listen 8099;

        location / {
            proxy_pass http://url1;
        }
    }
}

ip_hash法

保证来自同一个ip地址请求,最终请求到同一个服务器。

http {
    upstream url1 {
        ip_hash;
        server 192.168.0.1:80;
        server 192.168.0.1:7090;
        server 192.168.0.2:8081;
    }

    server {
        listen 8099;

        location / {
            proxy_pass http://url1;
        }
    }
}

权重法

顾名思义,根据权重决定服务的请求频率。

http {
    upstream url1 {
        server 192.168.0.1:80 weight 2;
        server 192.168.0.1:7090 weight 3;
        server 192.168.0.2:8081 weight 5;
    }

    server {
        listen 8099;

        location / {
            proxy_pass http://url1;
        }
    }
}

以上例子中,10个请求,有2个会分给192.168.0.1:80,有3个给192.168.0.1:7090,五个给192.168.0.2:8081。

根据使用经验来说,如果使用了上述配置,假如192.168.0.2:8081不可用,那么10个请求只有5个可以被转发处理,从而会体现在业务系统层面。所以还是要选择最适合的场景使用最适合的方法啊。

结语

从使用经验来说,nginx是一个强大的Web工具,可以广泛的应用在网络部署、软件开发、实施、运维等多个方面。从nginx官方资料介绍来看nginx的功能还远不止以上内容,限于知识水平、学习程度及软硬件环境,暂时先写这些。随着不断地学习,作者尽量多研究研究并记录成文。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一时想不起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值