0%

Nginx快速上手

Nginx头图

Nginx 是一个高性能的 HTTP 服务器,也常用于虚拟主机、反向代理和负载均衡,相较于 Apache、lighttpd 具有占用内存少、稳定性高等优势。


概述

Nginx 是一个高性能的 HTTP 服务器,也常用于虚拟主机、反向代理和负载均衡,相较于 Apache、lighttpd 具有占用内存少、稳定性高等优势。

Nginx 的用途:

  • HTTP 服务器:Nginx 可以独立提供 HTTP 服务,作为静态网页服务器。
  • 虚拟主机:在一台服务器上虚拟出多个网站。
  • 反向代理:从一组或多组后端服务器上获取资源,然后再将这些资源返回给客户端。
  • 负载均衡:多台服务器组成的集群使用 Nginx 做反向代理,分担负载。

安装与使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 安装nginx
$ yum install -y nginx

# 启动Nginx,加载默认配置文件/etc/nginx/conf/nginx.conf
$ nginx

# 使用-c参数,加载指定的配置文件
$ nginx -c /etc/nginx/conf/blog.conf

# 测试配置文件是否存在问题
$ nginx -t

# 重新加载配置文件,无需重启Nginx
$ nginx -s reload

# 从容停止,Nginx进程处理任务完毕后停止
$ nginx -s quit

# 快速停止,相当于kill
$ nginx -s stop

# 设置开机自启
$ systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

配置

HTTP服务器

将写好 HTML 文件放在 /usr/share/nginx/html 下即可被访问到,也可以在配置文件 /etc/nginx/nginx.conf 中修改 root 指定的位置:

nginx.conf
1
2
3
4
5
6
7
8
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
- root /usr/share/nginx/html;
+ root /home/www/hexo;
...
}

测试配置文件是否正确,并重新加载配置文件:

1
2
3
4
5
# 测试配置文件是否正确
$ nginx -t

# 重新加载配置文件,无需重启Nginx
$ nginx -s reload

虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机都可以独立对外提供 WEB 服务。

Nginx 提供了三种虚拟主机配置方式,常用的为第三种:

  1. 基于IP的虚拟主机
  2. 基于端口的虚拟主机
  3. 基于域名的虚拟主机

基于域名的虚拟主机

需求:在一台服务器上,根据域名不同,分别提供博客和小游戏两个服务。

修改 nginx.conf 配置文件:

nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 小游戏
server {
listen 80;
listen [::]:80;
server_name watermelonrank.sannaha.moe;

root /export/server/watermelonrank;
include /etc/nginx/default.d/*.conf;
...
}

# 博客
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name sannaha.moe;

root /home/www/hexo;
include /etc/nginx/default.d/*.conf;
...
}

重新加载配置文件:

1
$ nginx -s reload

这样访问 watermelonrank.sannaha.moe 访问的是小游戏项目,访问 sannaha.moe 访问的是博客项目。

反向代理

在了解 Nginx 反向代理之前,先介绍下什么是代理服务器:

代理服务器:是一个夹在客户机和目标主机中间的服务器。能提高客户机访问响应速度,还能设置防火墙过滤不安全信息。

为什么使用代理服务器:

  • 响应速度快。客户机发送请求,代理服务器接收请求后,再转发给目标主机。目标主机接收请求并将数据返回给代理服务器,代理服务器将数据返回给客户机同时也会保存数据到本地。若客户机下次有相同的请求,则直接从本地数据返回。从而提高了响应的速度
  • 设置防火墙:因为代理服务器处于客户机和目标主机中间,客户机所有的请求都会经过代理服务器,所以可以在代理服务器上设置防火墙,过滤不安全的信息,同时也方便管理

清楚了代理服务器后,再来了解正向代理和反向代理的区别:

  • 正向代理:客户机明确指定目标主机提供服务(目标主机被动接收请求)
  • 反向代理:客户机提供需求,代理服务器从一群目标主机中找一台去实现该需求(目标主机主动接收请求)

将客户比作顾客,代理服务器比作服务员,目标主机比作厨师,正、反向代理就像以下场景:

  • 正向代理:顾客:“服务员,我就要厨师A做的红烧狮子头”。服务员:“好嘞,我这就安排厨师A给您做!”
  • 反向代理:顾客:“服务员,我要一份红烧狮子头”。服务员:“好嘞,我们的厨师B炒菜贼好吃!”

没有歧视其他菜品和厨师的意思

原来由浏览器直接请求 Tomcat 获得内容,现在由 Nginx 作为代理请求目标地址,并将目标地址的数据返回给浏览器。

  1. 准备两个 Tomcat 服务器,端口分别是 8080 和 8081

  2. 修改 Nginx 配置文件。upstream 定义每个设备的状态,server 配置服务,server_name 指定域名,proxy_pass 代理转发到那台设备上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
upstream album{
server 192.168.153.100:8080;
}

upstream blog{
server 192.168.153.100:8081;
}

server {
listen 80;
server_name album.com;

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

server {
listen 80;
server_name blog;

location / {
proxy_pass http://blog;
index index.html;
}
}
  1. 重新加载配置文件
/export/servers/nginx/sbin
1
./nginx -s reload

负载均衡

负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求,需要用多台服务器组成集群,可以使用 Nginx 做反向代理。可以在性能低的主机分配少一些的负载,在性能高的主机上分配更多的负载,充分利用主机的性能,降低服务器的总压力。

Nginx 的 upstream 默认是以轮询的方式实现负载均衡(平均分配),也可以使用 weight 手动分配权值。

  1. 准备三个 Tomcat 服务器,端口分别是 8080,8081和8082

  2. 修改 Nginx 配置文件,默认使用轮询的方式平均分配负载,也可以使用 weight 手动分配权重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
upstream blogserver {
server 192.168.225.133:8080 weight=2;
server 192.168.225.133:8081 weight=1;
server 192.168.225.133:8082 weight=1;
}

server {
listen 80;
server_name blog.com;

location / {
proxy_pass http://blogserver;
index index.html;
}
}
  1. 重新加载配置文件
/export/servers/nginx/sbin
1
./nginx -s reload

注意:轮询的是每个资源文件(js、css、html),而不是项目整体。如果在 location 中配置多个不同的项目,会因为轮询导致每个项目都有一半文件 404。

附:启动 Tomcat

/export/servers/tomcat/tomcat-8080/bin/
1
./startup.sh && tail -100f ../logs/catalina.out

参考资料:
Nginx 反向代理 负载均衡 虚拟主机

  • 本文作者: SANNAHA
  • 本文链接: https://sannaha.moe/Nginx/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!