Nginx
Nginx是一款高性能HTTP服务器软件,具有优秀的高并发处理能力,同时支持反向代理及负载均衡等能力
默认路径
执行脚本: /usr/share/nginx
配置文件:/etc/nginx/nginx.conf
日志文件:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log查看本机地址命令是: ifconfig 查看端口占用情况: sudo netstat -tupln | grep 端口号 ,HTTP 默认端口为 80 杀死某个进程 : sudo kill -9 xx进程号
Nginx 常用命令及参数:
- nginx -t 测试配置是否正确,配置文件修改后先操作验证,在进行后续操作。
- nginx -s reload 加载最新配置,等待全部子进程结束,然后开辟新的子进程使用新的配置。
- nginx -s reopen 重新打开日志,重命名 access.log 日志文件,并重新创建新 access.log 文件,再次访问查看变化。
- nginx -s quit 优雅停止,等待全部子进程处理完毕,不再开启新的子进程。
- nginx -s stop 立即停止,不等待子进程处理,立即停止所有子进程及主进程
配置项相关
Main #全局配置区,Nginx 核心功能配置
events{ # events 事件区,子进程核心配置
}
http { # http 服务器配置区
server { # 不同服务配置区
location { # location 不同请求路径配置区
}
}
}
mail{ # 邮件代理配置区
server{ # 邮件服务配置区
}
}默认配置解析
读nginx配置文件内容,过滤掉注释后的内容: egrep -v "#|^$" nginx.conf
user www-data; #使用那个用户角色运行 Nginx
worker_processes auto; #允许开启的 worker 数量,通常设置成和cpu的数量相等
pid /run/nginx.pid; # pid 路径
include /etc/nginx/modules-enabled/*.conf; #引入其他配置项
events { # 事件区
# 每个 work 进程支持的最大链接数,理论值 65535 每个进程的最大句柄数
worker_connections 1024;
# 2字节==16位,
}
http { # http 区
#sendfile 指定 nginx 调用 sendfile 函数(zero copy 方式)来输出文件,
#配合 tcp_nopush 与 tcp_nodelay 完成数据的快速响应
sendfile on;
tcp_nopush on; # 数据包会累积后一起传输,可以提高传输效率。
tcp_nodelay on; #小的数据包不等待直接传输
# tcp_nopush 与 tcp_nodelay 互斥,Nginx 会借助sendfile 进行平衡处理
# 持久链接打开的超时时长
keepalive_timeout 65;
# 散列表的冲突率,越大,消耗内存越多,冲突率越低,检索速度就更快
types_hash_max_size 2048;
# mime 类型列表
include /etc/nginx/mime.types;
# 默认 mime 类型 流
default_type application/octet-stream;
# 协商ssl加密算法时,优先使用服务端的加密套件
ssl_prefer_server_ciphers on;
# [错误]日志存储路径
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 开启 gzip 协议压缩,减少数据传输量
gzip on;
# 引入其他配置文件
include /etc/nginx/conf.d/*.conf;
server { #server区
# 设置系统监听端口
listen 80 default_server;
listen [::]:80 default_server;
# 定义服务器访问默认根路径
root /var/www/html;
# 定义首页索引文件的名称
index index.html index.htm index.nginx-debian.html;
# 定义访问域名
server_name _;
# location 区域,相当于路由判断
location / {
try_files $uri $uri/ =404;
}
}
}反向代理
反向代理就是外部客户端通过网关访问内网服务器上的内容,网关起到了反向代理的功能,内网服务器不对外提供服务,一般由防火墙设立拦截,对外暴露网关端口
- 反向代理,代理的是服务器,帮助服务器处理请求响应给客户端,隐藏真实服务器响应。
- 正向代理,代理的是客户端,帮助客户端获取目标服务器的数据,隐藏真实客户端请求。
配置两台服务器: 一台专门用来做业务逻辑响应,设置端口 3000 。 一台专门用于处理图片资源响应,设置端口 3001 。
业务逻辑响应代码
// node-server.js
var http = require('http')
var server = http.createServer()
server.listen(3000)
server.on('request',(req,res)=>{
if(req.url == '/'){
res.end('node-server')
}else{
res.end('heihei')
}
})图片资源响应代码
// 图片资源响应 3001
var http = require('http')
var fs = require('fs')
var server = http.createServer()
server.listen(3001)
server.on('request',(req,res)=>{
fs.readFile('./'+req.url,(err,data)=>{
if(err){
res.end('没有这个文件')
}else{
res.end(data)
}
})
})启动上面两台服务器后,对 Nginx 的配置文件进行修改,具体的 server 配置项是 /etc/nginx/sites-available/default 文件
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_pass HTTP://127.0.0.1:3000;
}
location ~ \.(jpg|png)$ {
proxy_pass HTTP://127.0.0.1:3001;
}通过命令 nginx -s reload 重新加载配置文件后,就可以访问不同的内容了,由 Nginx 代理到不同的内部服务器,提供不同的资源响应;
负载均衡
内网服务器因为要处理大量的业务逻辑,因此,内网单台服务器的响应能力非常有限,为了提供更加快速的响应,一般会在内网架设多台业务逻辑处理器,当某一台正在工作时,可以由其他正在闲置的服务器来处理请求响应; 后端多台相同的业务逻辑服务器,被称为服务器集群;而当请求到来时,到底由那台服务器进行处理,取决于代理转向那台服务器,这项能力,就叫负载均衡;
upstream 自定义连接池名称 {
server ip:prot weight=权重值,越大越重 max_fails=失败次数 fail_timeout=超时时间
}
server{
location ~ \.(jpg|png)$ {
# 反向代理到负载链接池
proxy_pass HTTP://自定义连接池名称;
}
}例如:
upstream img_server {
server 127.0.0.1:3001 weight=2 max_fails=2 fail_timeout=30s;
server 127.0.0.1:3002 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:3003 weight=2 max_fails=2 fail_timeout=30s;
}
location /img {
proxy_pass http://img_server;
}https
- 获取 SSL 证书和密钥:首先,确保你已经获得有效的 SSL 证书和私钥文件。证书通常由证书颁发机构(CA)提供,可以是自签名证书或购买的证书。确保将证书文件(通常以 .crt 或 .pem 结尾)和私钥文件(通常以 .key 结尾)保存在安全的位置。
- 编辑 Nginx 配置文件:打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/certificate.crt;
ssl_certificate_key /path/private.key;
location / {
# 其他配置指令
}
}将http自动重定向到https配置
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}其他
本机连接远程服务器 ssh 用户名@域名/ip地址
读nginx配置文件内容,过滤掉注释后的内容: egrep -v "#|^$" nginx.conf
worker_connections 子进程最大连接数,根据服务器的配置可自行设置,一般65535