一,什么是Nginx?
- 是一个高性能web服务器,具有反向代理功能。可以对tomcat服务器进行代理
- 反向代理:可以将客户端的请求进行代理,交给合适的tomcat服务器进行处理
- 高性能:tomcat的并发量是600左右,而Nginx内存为1M左右,并发度达到了5万多。
二,负载均衡:
- 轮询:将请求依次循环地交给后台服务器处理 ,每个服务器处理请求的概率是相同的 例如(服务器1,服务器2,服务器3,服务器1,服务器2,服务器3,,,)
- 加权轮询:给性能好的服务器加权重,权重越高优先级就越高,Nginx转发的请求会被其优先处理
- ip hash:由于session在多态tomcat服务器中是不能共享的,你发送的第一次请求访问tomcat1,在其中保存了你的信息到session中,但你的第二次请求访问了tomcat2,其中没有你的session信息,就会造成出错。ip hash有一个集合存储了你的ip地址和拥有你session信息的tomcat服务器ip,使得你的第二次请求会访问tomcat1,不会造成信息的丢失。(一般不用ip hash,我们使用Redis)
- 动静分离:静态的资源直接从Nginx返回。
三,Nginx的安装:
window环境下:
- 下载地址:http://nginx.org/en/download.html
- 版本:选择stable version 右边的那一个
- 解压:放到英文路径下
- 运行:以管理员的身份打开Nginx.exe程序
- 查看:http://localhost/,进入后有Nginx欢迎页面,说明启动成功
Linux环境下:
- 下载地址:http://nginx.org/en/download.html
- 版本:选择stable version 左边的那一个
- 下载上传:使用XFTP把压缩文件上传到阿里云服务器
- 解压:使用xShell进行存放压缩包的路径,对压缩包进行解压:tar -zxvf nginx-1.18.0.tar.gz
- 进入文件:进入解压后的文件:cd nginx-1.18.0
- 配置:执行配置文件:./configure
- 创建文件:make
- 确定安装完成:make install
- 查看Nginx所在的位置:whereis nginx
- 发现位置是在:nginx: /usr/local/nginx
- 进入该目录:cd /usr/local/nginx
- 查看文件:ll
- 进入sbin文件:cd /sbin
- 启动Nginx:./nginx(条件:防火墙80端口已经打开,阿里云安全组80端口开放)
- 80端口被启动失败:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- 查看80端口被占用的情况:netstat -lnp|grep 80
- 发现80端口被http服务器主程序httpd占用,进程号是7276
- 杀死这个进程:kill -9 7276
- 查看杀死情况:netstat -lnp|grep 80 没想到httpd又生成了一个新的进程占用80端口,索性直接把Apache卸载
- 执行./nginx启动
- 成功
常用命令:
- 进入启动目录:cd /usr/local/nginx/sbin
- 启动:./nginx
- 停止:./nginx -s stop
- 安全退出:./nginx -s quit
- 重新加载配置文件:./nginx -s reload
- 查看Nginx进程:ps aux|grep nginx
在sbin目录下修改端口号的过程
- 返回上一级目录:cd ..
- 查看目录中的文件:ls
- 进入配置目录:cd conf
- 使用vim编辑器打开nginx.conf:vim nginx.conf
- 在vim中进入写模式:i
- 找到端口号,进行修改
- 保存vim编辑后的结果退出:按esc键退出写模式,输入:wq保存结果退出编辑器
- 返回上一级目录cd..
- 进入sbin目录:cd sbin
- 重新加载配置文件:./nginx -s reload
查看并打开端口号:
- 查看防火墙放行的端口号:firewall-cmd --list-all
- 打开端口号6666:firewall-cmd --zone=public --add-port=6666/tcp --permanent
- 重启防火墙使得打开端口生效:firewall-cmd --reload
- 查看是否开启
配置阿里云安全组:(前提是你已经买服务器,已经有实例了)
- 登入阿里云服务器管理:https://ecs.console.aliyun.com/?spm=5176.8789780.J_5834642020.2.50c645b5nRrvol#/securityGroup/region/cn-shenzhen
- 实例——》管理——》配置安全组规则——》配置规则——》手动添加
三,配置nginx.conf文件
我的文件路径:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\JetBrains\nginx-1.18.0\conf
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}