目录
1. Nigix简介
1.1 什么是 Nginx?
Nginx是一个高性能的HTTP和反向代理web服务器(随着客户端逐渐增多,一台服务器根本承载不了,因此需要有多台服务器,这时候就需要一台代理服务器来对多个客户端请求对应到多个服务器。)。
其特点是占有内存少,并发能力强。
Nginx是一个安装非常简单、配置文件非常简洁、Bug非常少的服务。Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数几个月也不需要重新启动。官方数据测试表明能够支持高达50000个并发连接数的响应。
1.2 Nginx的作用?
Http代理,反向代理。
1.3 正向代理和反向代理
正向代理:在客户端和原始服务器之间架设一个代理服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理:以代理服务器来接受网络上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。客户端无需做任何配置。
多台服务器通过同一代理服务器地址来访问!
共同点:
- 都是做为服务器和客户端的中间层。
- 都可以加强内网的安全性,阻止 Web 攻击。
- 都可以做缓存机制,提高访问速度。
区别:
- 正向代理其实是客户端的代理,反向代理则是服务器的代理。
- 正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁。
- 作用不同。正向代理主要是用来解决访问限制问题;而反向代理则是提供负载均衡、安全防护等作用。
在前后端分离的网站架构中,服务器经常要配置反向代理,使前端通过固定地址访问后端接口,这样后端服务可以采取负载均衡等性能优化措施,对前端应用透明。
1.4 Windows上安装Nginx
下载地址:https://nginx.org/en/download.html
启动nginx:
启动成功:
1.5 Linux上安装Nginx
首先下载:
然后通过xftp 上传到 虚拟机,然后解压
解压后进入文件夹执行如下指令:
# 安装nginx相关依赖包
yum install pcre-devel zlib zlib-devel openssl openssl-devel
# 安装后验证
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
# 编译和安装
make && make install
然后通过whereis nginx 指令找到nginx位置,切到对应目录。
进入sbin,执行./nginx
注意还需要开放端口!
启动成功:
2. Nginx常用命令
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
配置文件中的大致配置如下:
比如说我们想要能够用nginx访问80端口达到两台服务器上,并且用户无感知。这时候就要在80端口的server下作代理
docker 部署nginx
version: "3"
services:
nginx:
image: nginx:latest
container_name: nginx
hostname: nginx
volumes: // 数据卷挂载
- ../html:/usr/share/nginx/html // 将当前目录上一目录下的html文件夹 挂载到 容器中的 /usr/share/nginx/html 目录,容器中不存在此目录时会创建。已存在此目录时会覆盖
- ./nginx.conf:/etc/nginx/nginx.conf // 将当前目录下的 nginx.conf 文件挂载到 容器中的 /etc/nginx/nginx.conf,容器中不存在此文件时会创建,已存在此目录时会覆盖
ports:
- "80:80"
restart: always // 每次容器启动时都自动启动 nginx
上面挂载 html 是为了修改 nginx 初始展示页面,使其展示为我们自定义的页面。
本机编写的 nginx.conf 为:
user root;
worker_processes 1;
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"';
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location / {
root /usr/share/nginx/html; // 当访问80端口时,会去容器中此位置展示 index.html。这与上面我们在主机与容器挂载 html 位置是一致的!
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}