安装Nginx
使用yum源进行安装
安装nginx
sudo yum -y install nginx
卸载nginx
sudo yum remove nginx
nginx安装目录
/etc/nginx
配置Nginx服务
sudo systemctl enable nginx # 设置开机启动 sudo service nginx start # 启动 nginx 服务 sudo service nginx stop # 停止 nginx 服务 sudo service nginx restart # 重启 nginx 服务 sudo service nginx reload # 重新加载配置,一般是在修改过 nginx 配置文件时使用。
源码包方式安装
安装gcc
sudo yum -y install gcc gcc-c++ # nginx 编译时依赖 gcc 环境
安装pcre
sudo yum -y install pcre pcre-devel # 让 nginx支持重写功能
安装zlib
sudo yum -y install zlib zlib-devel
安装 openssl
sudo yum -y install openssl openssl-devel
下载nginx 官网:http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.23.1.tar.gz
解压nginx
tar -zxvf nginx-1.23.1.tar.gz
解压完成后进入nginx目录进行源码编译安装
cd nginx-1.11.5 ./configure --prefix=/usr/local/nginx # 检查平台安装环境 # --prefix=/usr/local/nginx 是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件
编译
make
安装
make install
开启防火墙访问
firewall-cmd --permanent --add-port=80/tcp (port=需要开启的端口号) service firewalld restart
查看已开放的端口号
firewall-cmd --list-all
Nginx常用命令
查看nginx版本号
./nginx -v
启动nginx
./nginx
关闭nginx
./nginx -s stop
重新加载nginx (不重启nginx重新加载配置文件)
./nginx -s reload
Nginx配置文件组成
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,如:worker_process: worker_processes值越大,可以支持的并发处理量也越多
第二部分:events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接
比如: worker_connections 1024:支持的最大连接数
第三部分:http块
Nginx服务器配置中最频繁的部分,http块也可以包括http全局块,server块
配置windows域名本地解析
修改C:\Windows\System32\drivers\etc\hosts
10.xxx... www.xxx.com
Nginx反向代理配置
- 单节点代理
server {
listen 80; #nginx监听的端口号
server_name 10.161.117.115; #服务器ip 本地访问使用localhost
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # location后配置访问路径
root html;
proxy_pass http://127.0.0.1:8080; #配置反向代理的服务器域名端口
index index.html index.htm;
}
- 多节点代理(根据路径进行匹配访问)
server {
listen 9001; # 监听的端口号
server_name 10.161.117.115; # 服务器地址
location ~ /edu { # 匹配的路由
proxy_pass http://127.0.0.1:8080; # 代理的服务器地址
}
location ~ /vod {
proxy_pass http://127.0.0.1:8081;
}
}
location指令
作用:该指令用于匹配URL
语法:
location [= | ~ | ~* | ^~] uri {
}
- =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
- ~:用于表示uri包含正则表达式,并且区分大小写
- ~*:用于表示uri包含的正则表达式,并且不区分大小写
- ^~:用于不包含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字符串匹配最高的location后,;立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
- 如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识
Nginx负载均衡配置
在配置文件中的http块中配置upstream
upstream myserver{ server 10.161.117.115:8080; server 10.161.117.115:8081; }
- server为需要进行负载均衡的服务器列表
配置proxy_pass
location / { proxy_pass http://myserver; #使用声明的负载均衡服务 }
负载均衡策略
- 轮训:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除
weight:weight 代表权,重默认为 1,权重越高被分配的客户端越多,用于后端服务器性能不均的情况
server 10.161.117.115:8080 weight=5; server 10.161.117.115:8081 weight=10;
ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题(计算ip的hash值)
upstream myserver{ ip_hash;#开启ip_hash server 10.161.117.115:8080; server 10.161.117.115:8081; }
fair:第三方(按后端服务器的响应时间来分配请求,响应时间短的优先分配)
upstream myserver{ server 10.161.117.115:8080; server 10.161.117.115:8081; fire;#开启按响应时间分配 }
Nginx动静分离
概念:Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面
动静分离从目前实现角度来讲大致分为两种:
- 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
- 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开
配置动静分离
location /img { #配置静态资源访问路径
root /data/; #对静态资源访问路径进行拼接 /data/img
autoindex on; # 访问路径时在web页面显示文件索引树
}
location /www {
alias /data/www; #将/www替换为/data/www,做别名
}
Nginx原理
- Nginx服务启动后包含一个master进行和多个worker进行,master负责任务发放,worker进行负责任务争抢
有什么好处好处?
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险
worker配置多少个合适?
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗
设置worker数量
worker_processes 4
- 连接数worker_connection:这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于 HTTP 请 求 本 地 资 源来 说 , 能 够 支 持 的 最大 并 发 数 量 是
worker_connections worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。