安装nginx
下载地址
[下载地址](http://nginx.org/en/download.html)
官网:
http://nginx.org/
或者
wget http://nginx.org/download/nginx-1.17.0.tar.gz
本次以 nginx-1.12.2 为例
1、安装依赖
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
yum -y install zlib zlib-devel openssl openssl-devel
2、安装nginx
解压安装包
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure
make && make install
安装完成后可以在/usr/local/nginx/sbin 下看到启动文件 nginx
在该目录下执行./nginx 可以启动
./nginx
## 查看进程是否启动
ps -ef | grep nginx
验证方法:
直接在浏览器访问 主机IP
3、若主机开启了防火墙,需添加端口到防火墙
查看防火墙开放的端口:
firewall-cmd --list-all
设置防火墙开放的端口号:
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
nginx常用命令
在 /usr/local/nginx/sbin 下执行
-- 查看版本:
./nginx -v
-- 关闭nginx
./nginx -s stop
-- 启动nginx
./nginx
-- 重新加载nginx
./nginx -s reload
nginx的配置
1、配置文件的位置:
/usr/local/nginx/conf/nginx.conf
2、配置文件的内容
分为三部份内容:
1、全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。
比如: worker_processes 1;
worker_processes 的值越大,可以支持的并发处理量越多
2、events块
主要影响nginx服务器与用户的网络连接
比如: worker_connections 1024; nginx支持的最大连接数
3、http块(配置最多)
nginx配置实例 -- 反向代理一
示例: 在页面访问 www.123.com, 跳转到Linux的tomcat主页面
操作:
1、先修改hosts文件,将域名与主机地址做映射
10.20.0.102 www.123.com
2、在nginx中进行请求转发的配置(反向代理的配置)
修改文件 /usr/local/nginx/conf/nginx.conf ,文件里的http下的server中的内容 ,
1、将server_name 改成主机对应的ip
2、在location中添加 proxy_pass http://127.0.0.1:8080;
添加的是要转发的端口内容
如下所示:
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
# server_name location;
server_name 10.20.0.102;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
...
3、重新加载nginx
./nginx -s reload
4、在页面上访问www.123.com 进行测试
可以看到页面内容为已转发后的内容 -- tomcat页面。
nginx配置实例 -- 反向代理二
监听一个端口,根据端口下面的内容不同,转发向不同的端口。
例: 在主机上启动了两个服务,端口号分别是8080、8081,nginx监听的端口为9001,当请求的内容中为:
http://10.20.0.102:9001/edu/ 转发到10.20.0.102:8080
http://10.20.0.102:9001/vop/ 转发到10.20.0.102:8081
nginx 的配置如下:
server {
listen 9001;
server_name 10.20.0.102;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
location 的使用说明
location [ = | ~ | ~* | ^~ ] uri {
}
1、 = : 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功就停止继续向下搜索并立即处理该请求。
2、 ~ : 用于表示uri包含正则表达式,并且区分大小写。
3、~* : 用于表示uri包含正则表达式,不区分大小写。
4、^~ : 用于不含正则表达式的 uri 前,要求 nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,
立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。
注意: 如果uri包含正则表达式,则必须要有 ~ 或者 ~* 标识。
nginx配置实例 -- 反向代理三
例: 当一个服务对不同的系统提供的接口号不同时,对系统一提供的接口的端口为10.20.0.102:8080, 对系统二提供的接口的端口为 10.20.0.102:8081, 这时需要nginx同时监听这两个端口,然后将请求转发到服务的端口上(服务自身的端口实际为1158).
配置如下:
http{
...
# 服务自身端口
upstream myserver {
server 10.20.0.102:1158;
}
server {
listen 8080;
listen 8081;
server_name localhost;
location / {
proxy_pass http://myserver;
......
}
}
}
nginx配置实例 -- 负载均衡
根据请求,将请求平均转发到不同的服务上。
如: 有一个请求到 10.20.0.102:80 上,然后nginx将请求转发到8080,8081端口上。
/usr/local/nginx/conf/nginx.conf 配置如下:
http{
...
upstream myserver {
server 10.20.0.102:8080;
server 10.20.0.102:8081;
}
server {
listen 80;
server_name 10.20.0.102;
location / {
proxy_pass http://myserver;
......
}
}
}
负载均衡的策略:
1、轮询(默认的策略)
每个请求按时间顺序逐一分配到不同的后端服务器上,如果服务器down了,会自动剔除。
2、 weight(权重)
权重默认为1,权重越高被分配的客户端越多。
如:上面的例子中,8081的性能更好,分配的客户端更多。
upstream myserver {
server 10.20.0.102:8080 weight=5;
server 10.20.0.102:8081 weight=10;
}
3、ip_hash
每个请求按访问IP的hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session 的问题。
例如:
upstream server_pool{
ip_hash;
server 10.20.0.101:8080;
server 10.20.0.102:8080;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 10.20.0.101:8080;
server 10.20.0.102:8080;
fair;
}
nginx配置实例 -- 动静分离
nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分开,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用nginx处理静态页面,tomcat处理动态页面。
动静分离从目前实现角度来讲大致分为两种:
一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,这是目前主流的方案。
另一种是动态跟静态文件混合在一起发布,通过nginx来分开。
通过location指定不同的后缀名实现不同的请求转发,通过expires参数设罝,可以使浏览器缓存过期时间,减少与限务器之间的请求和流量。
具体Expires定义:
是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。
此种方法非常适合不经常变动资源。(如果经常更新的文件, 不建议使用Expires来缓存)。
假如这里设罝3d,表示在这3天之内访问这个URL,发送 一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,
如果有修改,则直接从服务器重新下载,返回状态码200。
网友评论