nginx(高性能)(响应快,并发高)
- 一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
- 特点:占有内存少,并发能力强。高达50000个并发请求响应。
- tomcat并发数正常150,也可以考虑加大,到250,考虑集群
- 提高响应速度
负载均衡
-
nginx提供的负载均衡策略有2种,内置策略和扩展策略
-
内置策略
-
轮询
-
加权轮询
-
iphash
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个 客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题
-
-
比如:静态资源访问nginx本地(缓存操作)
反向代理
动静分离
- 动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css,html,jpg,js等等文件),这些不需要经过后台处理的的文件称为静态文件,让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,提高资源响应的速度。
Linux安装nginx
-
whereis nginx // 查找nginx文件 nginx // 命令测试是否安装nginx
-
rz // 上传nginx文件 tar -zxvf xxx.tar.gz // 解压nginx ./configure // 自动配置nginx make // 手动安装nginx make install // 手动安装 cs sbin/ // sbin进入sbin目录 ./nginx // 执行nginx cd conf/ //进入配置文件文件夹 cat nginx.conf // 查看配置文件 ./nginx -s reload //重新加载配置文件
起不来两个原因:
-
防火墙端口没有开
# 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop # 查看防火墙规则 firewall -cmd --list-all # 查询端口是否开放 firewall -cmd --query-port=8080/tcp firewall-cmd --list-ports 查看防火墙放行的端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 防火墙放行端口 public:指定外部连接可以进入 firewall-cmd --zone=public --remove-port=80/tcp --permanent 防火墙放行端口 firewall-cmd --reload 防火墙重启 # 参数解释 firewall-cmd:是Linux提供的操作firewall的工具; --permanent:表示设置为持久 --add -port:标识添加的端口
-
阿里云和腾讯云的安全组端口没有放开
nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux | grep nginx 查看nginx进程
如果想查看进程的CPU占用率和内存占用率,可以使用aux
ps -ef | grep nginx
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
nginx 配置详解
########### 每个指令必须有分号结束。#################
#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
try_files $uri $uri/ /index.html;
// try_files按配置顺序检查文件是否存在,返回第一个找到的文件。
proxy_set_header Host $http_host; // 允许重新定义或者添加发往后端服务器的请求头。
proxy_set_header X-Real-IP $remote_addr;// web服务器端获得用户的真实ip
proxy_set_header REMOTE-HOST $remote_addr;// web服务器端获得用户的真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; // 获取客户端的IP地址
}
}
}