Nginx 简介

Nginx 是什么?

Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器。Nginx 可以作为一个 Web 服务器进行网站的发布,也可以作为反向代理服务器进行负载均衡的实现。常见的 Web 服务器:Tomcat、Apache、Nginx、Weblogic 等

特点

占用内存少、并发能力强

搭建 Nginx 环境

安装 nginx

目录结构

目录 路径
执行路径 /usr/sbin/nginx
配置文件 /etc/nginx/nginx.conf
日志目录 /var/log/nginx/
默认虚拟主机目录 /usr/share/nginx/html

相关命令

1
2
3
4
5
6
7
8
netstat -ntpl | grep 80 #查看进程信息
ps aux | grep nginx
sudo nginx #启动
sudo nginx -s stop #停止
sudo nginx -s reload #重启
sudo nginx -c /etc/nginx/nginx.conf #使用指定的配置文件启动
sudo nginx -t # 测试配置文件是否有错误
sudo nginx -v #查看版本信息

关于配置文件

主配置文件 nginx.conf,包含三部分内容:全局配置、工作模式配置、HTTP 配置

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
27
28
29
30
31
32
33
34
35
# 运行 nginx 的用户
user nginx;
# 工作进程的数量,可以根据 CPU 的核心总数来设置
worker_processes 1;
# 错误日志文件的位置及输出级别 error_log
/var/log/nginx/error.log warn;
#PID 文件的位置
pid /var/run/nginx.pid;
# 工作模式配置
events {
# 每个进程最大处理的连接数
worker_connections 10000;
}
#HTTP 配置
http {
# 支持的媒体类型
include /etc/nginx/mime.types;
# 默认的类型
default_type application/octet-stream;
# 日志格式
log_formatmain '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# 访问日志文件的位置
access_log /var/log/nginx/access.log main;
# 是否调用 sendfile 函数来输出文件
sendfile on;
#tcp_nopush on;
# 连接超时时间
keepalive_timeout 65;
# 开启 gzip 压缩 #gzip on;
# 引入外部配置文件,包含虚拟主机的配置
include /etc/nginx/conf.d/*.conf;}

虚拟主机配置文件 /etc/nginx/conf.d/default.conf,可以定义多个虚拟主机配置文件

将原配置文件备份,养成数据备份的习惯

HTTP 服务器

虚拟主机

把一台物理服务器划分为多个虚拟的服务器,称为虚拟主机。每个虚拟主机对应一个 Web 站点,其实就是在一台服务器上搭建多个网站

步骤

准备网站目录及测试页面

1
2
3
mkdir /www/test1 /www/test2
echo 'test1' > /www/test1/index.html
echo 'test2' > /www/test2/index.html

创建虚拟主机配置文件并配置

1
2
3
cd /etc/nginx/conf.d/
sudo cp default.conf test1.conf
sudo cp default.conf test2.conf

sudo vim test1.conf

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
server {
listen 80;
server_name test1.ml2u.ml;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /www/test1;
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 /usr/share/nginx/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;
#}
}

实现虚拟主机的三种方式:

  • 基于不同的 IP
  • 基于不同的端口
  • 基于不同的域名

配置域名解析 (这里以修改本地 host 文件为例子,实际使用需要购买域名)
在客户端主机中配置域名解析

1
2
3
4
# Linux/Mac:/etc/hosts

192.168.1.59 www.ums.com
192.168.1.59 www.sms.com

域名解析的过程:查找 hosts 文件——>DNS

注:该方式仅是本地测试时使用的,实际应用中要购买注册域名

作为图片服务器

使用 Nginx 作为图片服务器:

上传:使用 ftp 或 sftp 上传图片到服务器指定的 ftp 目录下
下载:通过访问 Nginx 服务器来访问 ftp 目录下的图片文件,即使用 HTTP 请求来访问资源文件,而不是通过 FTP 请求
步骤:

创建存放图片的文件夹,并上传图片到该目录中
mkdir /home/soft01/www/images
配置 Nginx

1
2
3
4
5
sudo vi /etc/nginx/conf.d/default.conf
location /images {
root /home/soft01/www;
autoindex on; #打开目录浏览功能
}

访问 url:http://ip/images

实际物理路径:/home/soft01/www/images

反向代理

正向代理

概念:位于客户端和原始服务器之间的服务器,为了从原始服务器获取数据,客户端向代理服务器发送请求并指定请求目标(原始服务器),然后代理服务器将请求转换给原始服务器,并将响应的数据返回给客户端

正向代理是客户端使用的,对客户端进行代理,客户端知道并主动使用代理

作用:

  • 访问原来无法访问的资源(google、fackbook 等),翻墙
  • 可以做缓存,加速资源的访问
  • 对客户端上网进行认证授权
  • 上网行为管理,记录用户访问记录,对外隐藏用户信息

反向代理

概念

客户端发送请求到服务器(客户端认为是原始服务器,实际上是一台反向服务器),反向代理服务器接收请求并将请求转发给内部网络中的多台集群服务器,并将响应的数据返回给客户端反向代理一般用于服务器集群、分布式等,实现负载均衡

作用

  • 负载均衡,提高处理和响应速度
  • 保证内网的安全,隐藏服务器信息,防止 Web 攻击

配置

步骤:
创建虚拟主机配置文件,并配置反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
# 设置 tomcat 代理
upstream tomcat {
server 66.42.95.239:8080;
}
server {
listen 80;
server_name tomcat.ml2u.ml;
location / {
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://tomcat;
}
}

负载均衡

概念

将接收到的请求按照一定的规则分发到不同的服务器进行处理,从而提高系统响应和处理速度,称为负载均衡

配置

步骤:

准备网站(模拟淘宝,后面有多台服务器)

1
2
3
4
5
6
7
8
9
10
11
12
13
#拷贝两个 tomcat

cp -r apache-tomcat-8.5.30 taobao1
cp -r apache-tomcat-8.5.30 taobao2

#修改 tomcat 端口
vi taobao1/conf/server.xml
vi taobao2/conf/server.xml
# 修改页面
vi taobao1/webapps/ROOT/index.jsp
vi taobao2/webapps/ROOT/index.jsp
# 启动 tomcat
./startup.s

创建虚拟主机配置文件,并配置负载均衡

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo cp proxy.conf taobao.conf
sudo vi taobao.conf
# 后台服务器列表
upstream taobao_server{
server 192.168.1.66:8081 weight=3; #weight 表示权重,权重越高被分配到的几率越大
server 192.168.1.66:8082 weight=7;
}
server {
listen 80;
server_name www.taobao.com;
location / {
proxy_pass http://taobao_server; # 指定代理的后台服务器 }
}

动静分离

问题:tomcat 在处理静态资源时效率不高,默认情况下所有资源都由 tomcat 处理,会导致 Web 应用响应慢,占用系统资源

解决:
将静态资源交由 Nginx 处理,动态资源仍由 tomcat 处理,实现动静分离

实际上就是把 Nginx 作为静态资源服务

配置步骤:

编辑 taobao.conf,配置动态分离

1
2
3
4
5
sudo vi /etc/nginx/conf.d/taobao.conf
#处理静态资源
location~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
root /home/soft01/www/static;
}

创建存放静态资源的文件夹,并将资源资源放到该目录中

1
2
3
4
5
cd /home/soft01/www
mkdir staticcd static
chmod777 *
cd /home/soft01/software/taobao1/webapp/ROOT
cp tomcat.css tomcat.png /home/soft01/www/static

高并发的处理:

  • 负载均衡:集群
  • 动静分离:使用 Nginx、CDN
  • 缓存:以空间换时间,提高系统效率
  • 限流:流量控制
  • 降级:服务降载