nginx:
nginx的启动,停止,重新加载配置文件的命令
几个常用的nginx命令
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:
可以这样使用
/usr/local/nginx/sbin/nginx -参数
-c :使用指定的配置文件而不是 conf 目录下的 nginx.conf 。
-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重 要,用来检测所修改的配置文件是否有语法错误。
-s reload 重载
-s stop 停止
nginx启动/重启/停止
这个很简单,就是运行命令:
sudo /etc/init.d/nginx {start|restart|stop}
nginx检查配置
/usr/local/nginx/sbin/nginx -t
nginx修改配置后重载
/usr/local/nginx/sbin/nginx -s reload
nginx虚拟机如何配置
一 端口方式:
第一步:编辑/usr/local/nginx/conf/nginx.conf文件
第二步:复制 server一份。(在复制之确认上传了一个新的静态项目。)
第三步:修改端口和第一份保持不一样,修改local/root的为新文件的名字:
第四步:重启nginx。
自己上传几个页面尝试一下,目录结构如下:
具体代码如下:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
} #原本的是这个样子的端口80跟目录为html,首页为index.html
server {
listen 81;
server_name localhost;
location / {
root cart;
index cart.html;
}
}
server {
listen 82;
server_name localhost;
location / {
root search;
index search.html;
}
}
---------
二 域名方式:
第一步修改本机hosts:
192.168.40.131 cart..com
192.168.40.131 search..com
第二步:修改Linux中nginx的配置文件:nginx.conf:
端口都改80
修改各个:
第一个server中server_name : cart..com
第二个server中server_name : search..com
第三步重启nginx:./nginx -s reload
第四步测试
浏览器输入 cart..com,search..com。
nginx 正向代理与反向代理
正向代理:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bedea7874b49817320ddccb673f07ac1.png)
是一个位于**客户端**和**原始服务器**(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端(目的是为了保护客户端用户)
**配置文件:**
server {
# 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
resolver 8.8.8.8; # 必需
resolver_timeout 5s;
# 监听端口
listen 8080;
access_log /home/reistlin/logs/proxy.access.log;
error_log /home/reistlin/logs/proxy.error.log;
location / {
# 配置正向代理参数
proxy_pass $scheme://$host$request_uri;
# 解决如果URL中带"."后Nginx 503错误
proxy_set_header Host $http_host;
# 配置缓存大小
proxy_buffers 256 4k;
# 关闭磁盘缓存读写减少I/O
proxy_max_temp_file_size 0;
# 代理连接超时时间
proxy_connect_timeout 30;
# 配置代理服务器HTTP状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
注意:
1.不要设置server_name指令
2.我们测试的时候可以使用谷歌浏览器,在谷歌浏览器的高级设置里面设置代理,代理地址就是我们nginx的 http://ip:端口号
反向代理
反向代理也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。
**注:**proxy_pass 设置代理服务器的地址,可以是主机名称、IP地址加端口号等形式。
proxy_pass URL
注意:1.当代理的是一组服务器时可以使用 upstream 指令来设置。 2. 当URL中含有uri时,(例如 “http://127.0.0.1:8080/”、“http://127.0.0.1:8080/demo.html”)不管客户端访问的是地址中的uri是什么,代理服务器都会代理到 URL的地址;当URL中不包含uri时(例如:“http://127.0.0.1:8080”),那么当客户端访问服务器时,代理服务器会根据客户端请求的uri来访问具体的URL地址
.proxy_pass_request_body 用于配置是否将客户端的请求的请求体发送给代理服务器。
proxy_pass_request_body on|off
proxy_pass_request_headers 用于配置是否将客户端的请求的头信息发送给代理服务器。
proxy_pass_request_headers on|off
proxy_set_header 可以更改nginx接收到的客户端请求的请求头信息,然后将新的请求头信息发送给被代理的服务器。
proxy_set_header field value
proxy_set_body ngin接收到客户端的请求后使用该指令可以修改request中的body体,然后将请求转发给代理服务器
proxy_set_body value
proxy_connect_timeout nginx服务器与被代理服务器之间尝试建立连接的的超时时间,默认为60s。
proxy_connect_timeout time
proxy_read_timeout nginx服务器接收被代理服务器数据时最大的等待时间,默认为60s。
proxy_read_timeot time
proxy_send_timeout nginx服务器发送数据至被代理服务器的最大等待时间,例如60s内没有发出一个字节则默认断开连接,默认60s。
proxy_send_timeout time
proxy_http_version nginx 服务器提供代理服务的http协议版本
proxy_http_version 1.0|1.1
proxy_method nginx服务器设置请求被代理服务器时使用的请求方法,一般为POST或者GET
proxy_method method
proxy_ignore_client_abort 当客户端中断网络请求时,nginx服务是否中断对代理服务器的请求,默认off
proxy_ignore_client_abort on|off
proxy_ignore_headers nginx服务器接收到被代理服务器的响应数据后,不会处理被设置的头域
proxy_ignore_headers field…
proxy_redirect 如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置
proxy_redirect redirect replacement; #使用replacement替换redirect
proxy_redirect default; #使用location块的uri替换掉 proxy_pass 后的变量
proxy_redirect off; #当前作用域下所有 proxy_redirect 指令全部失效
proxy_intercept_errors 该指令开启时,当被代理服务器返回http状态码为400或者大于400时,nginx服务器会使用自己定义(使用error_page指令)的响应错误页面,如果为off时直接返回状态码
proxy_intercept_errors on|off
proxy_next_upstream 当被代理的服务器是一个 使用upstream指令配置的一组服务器时,服务器组中的服务器遵循upstream指令配置的的轮训规则,同时也可以使用该指令来设置发生哪些异常时使用组内的下一个服务器处理请求。可选值:error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …;其中off指无法将请求发送给被代理服务器
proxy_next_upstream status
proxy_ssl_session_reuse 用于配置是否使用基于SSL安全协议的的会话连接(https://)被代理服务器,默认为开启状态
proxy_ssl_session_reuse on|off
nginx负载均衡配置
CentOS7.0安装Nginx 1.7.4
一、安装准备
首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装
yum install gcc-c++ -y
yum install pcre pcre-devel -y
yum install zlib zlib-devel -y
yum install openssl openssl--devel -y
二、安装Nginx
首先进入/usr/local目录
cd /usr/local
从官网下载nginx
wget http://nginx.org/download/nginx-1.7.4.tar.gz
查看是否有下载OK
ls
解压nginx压缩包
tar -zxvf nginx-1.7.4.tar.gz
会产生一个nginx-1.7.4 目录,这时进入nginx-1.7.4目录
cd nginx-1.7.4
接下来安装,依次执行
./configure
make
make install
如果没有报错,顺利完成后,最好看一下nginx的安装目录
whereis nginx
安装后目录(/usr/local/nginx)
部分命令如下:
http://www.cnblogs.com/codingcloud/p/5095066.html
测试配置文件是否正常:
/usr/local/nginx/sbin/nginx –t
负载均衡配置
nginx配置
cd /usr/local/nginx/conf
vim nginx.conf
#这里的域名要和下面proxy_pass的一样
upstream mengma.com {
server 192.168.0.100:8878 weight=1;
server 192.168.0.101:8878 weight=2;
}
server {
listen 80;
server_name 192.168.0.100;
location / {
proxy_pass http://mengma.com;
index index.html index.htm;
}
}
Nginx服务器之负载均衡策略
一、关于Nginx的负载均衡
在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一篇博客。
二、Nginx负载均衡策略
负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
#其他页面反向代理到tomcat容器
location ~ .*$ {
index index.jsp index.html;
proxy_pass http://dynamic_zuoyu;
}
这就是最基本的负载均衡实例,但这不足以满足实际需求;目前Nginx服务器的upstream模块支持6种方式的分配:
在这里,只详细说明Nginx自带的负载均衡策略,第三方不多描述。
1、轮询
最基本的配置方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。 有如下参数:
注意:
在轮询中,如果服务器down掉了,会自动剔除该服务器。
缺省配置就是轮询策略。
此策略适合服务器配置相当,无状态且短平快的服务使用。
2、weight
权重方式,在轮询策略的基础上指定轮询的几率。例子如下:
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。
注意:
权重越高分配到需要处理的请求越多。
此策略可以与least_conn和ip_hash结合使用。
此策略比较适合服务器的硬件配置差别比较大的情况。
3、ip_hash
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
#动态服务器组
upstream dynamic_zuoyu {
ip_hash; #保证每个访客固定访问一个后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
注意:
在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
ip_hash不能与backup同时使用。
此策略适合有状态服务,比如session。
当有服务器需要剔除,必须手动down掉。
4、least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
#动态服务器组
upstream dynamic_zuoyu {
least_conn; #把请求转发给连接数较少的后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
注意:
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
5、第三方策略
第三方的负载均衡策略的实现需要安装第三方插件。
①fair
按照服务器端的响应时间来分配请求,响应时间短的优先分配。
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
fair; #实现响应时间短的优先分配
}
②url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
#动态服务器组
upstream dynamic_zuoyu {
hash $request_uri; #实现每个url定向到同一个后端服务器
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
三、总结
以上便是6种负载均衡策略的实现方式,其中除了轮询和轮询权重外,都是Nginx根据不同的算法实现的。在实际运用中,需要根据不同的场景选择性运用,大都是多种策略结合使用以达到实际需求。