Nginx 安装与配置
文章目录
一、什么是nginx?
Nginx是异步框架的网页服务器,也可以用作反向搭理、负载平衡器和HTTP缓存。大部分web服务器使用Nginx、通常作为负载均衡器。Nginx 软件由伊戈尔·赛索耶夫创建并于 2004 年首次公开发布。Nginx 可以部署在网络上使用 FastCGI 脚本、SCGI 处理程序、WSGI 应用服务器或 Phusion Passenger 模块的动态 HTTP 内容,并可作为软件负载均衡器。
二、为什么要用nginx?
1、作为web服务器
Nginx 是一款面向性能设计的HTTP服务器,相较与Apache、lighttpd具有占有内存少稳定性高等优势。Nginx在官方测试的结果中,能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行连接。Nginx作为负载均衡服务器,内部是支持Rails和PHP程序对外服务,也支持作为HTTP代理服务器对外服务,采用C语言编写,无论在系统资源开销还是cpu使用效率要比Perlbal好很多。
2、Nginx 配置简单,Apache复杂
Nginx 启动容易,几乎可以做到7*24小时可以不间断运行,即使很长时间微未重新启动,也可以在不间断服务的情况下对软件版本进行升级,静态处理性能要比Apache 高3倍以上,Nginx需要配合其他后端来进行使用,而Apache对PHP支持较简单,组件同时也比Nginx多。
核心点:
Nginx 是异步的,多连接可对应一个进程;
Apache 是同步多进程模型,一个连接对应一个进程;
3、擅长领域
Nginx 适用于前端处理静态请求;
Apache 适用于后端处理动态请求;
三、安装
1、安装相关组件
Nginx 的配置运行需要运行相关的组件支持,需要先下载相关的组件从而确保Nginx的书顺利安装。
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2、创建运行用户组
Nginx 程序服务默认以nobody运行,建议创建新的账号,更准确的控制访问的权限,增加灵活性,降低安全风险。
Useradd -M -s /sbin/nglogin nginx
3、下载编译安装
3.1、下载nginx
下载地址:wget http://nginx.org/download/nginx-1.16.1.tar.gz
3.2、解压安装包
tar zxvf nginx-1.16.1.tar.gz
3.3、编译安装
配置nginx 编译安装时,将安装目录设置为/usr/local/nginx运行用户和组均设为nginx ;启动http_stub_status_module模块以支持状态统计,便于 查看服务器的连接信息连接信息。http_ssl_module模块支持https服务。
#cd nginx-1.6.1
#./configure --prefix=/usr/local/nginx --user=nginx --with-http_stub_status_module --with-http_ssl_module
#make
#make install
为nginx 主程添加软连接:
ln -s /usr/local/sbin/nginx /usr/local/sbin/
ls -l /usr/local/sbin/nginx
安装好之后,进入默认安装路径到nginx/sbin 目录下,执行./nginx 即可启动;
如果修改了Nginx的配置文件,可通过./nginx -s reload命令重新加载配置文件
Nginx 配置问及那路径/user/local/nginx/conf/nginx.conf
四、正向代理与反向代理
1、正向代理
你可以把局域网以外的Internet想象成一个外网世界,当我们的内网客户端要访问局域网以外的Internet的时候,需要在客户端浏览器中配置代理服务器,然后通过代理服务器来进行访问,将访问到的外网内容返回给客户端,而不是通过局域网中的客户端设备直接访问到局域网以外的Internet网站中,这种代理叫做:正向代理。
正向代理用途:
1:访问原来无法访问的资源
2:可做缓存,加速访问资源
3:对客户端访问授权,上网进行认证
4:代理可以记录用户访问记录,且对外隐藏用户信息
2、反向代理
无需再客户端进行配置即可访问,我们只需要将请求发送给反向代理服务器,然后由反向代理服务器去选择要访问的目标服务器获取数据后,再返回给客户端。可以理解为反向代理服务器和目标服务器对外访问的就是一台服务器,知道的只是反向发莉服务器地址,其实隐藏了真实服务器的ip地址,这种代理叫做反向代理
反向代理的用途:
1:保证内网安全,通常将反向代理作为公网访问地址,Web服务器是内网
2:负载均衡,通过反向代理服务器来优化网站的负载
3、正向代理配置
在 nginx.conf配置文件种的server节点下配置如下,不需要设置虚拟主机的名称和ip,使用默认即可。resolver 是必须要配置的,不然nginx无法处理收到的ip地址。
server {
resolver 114.114.114.114; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
在浏览器代理设置位置输入ip 和端口,如下是chrome设置代理方式:
设置-------->系统-----------代理您计算机的代理位置
4反向代理配置如下
在nginx.conf配置文件种的server节点下配置如下,不需要设置虚拟主机的名称和ip:
server {
listen 81; ##nginx 的端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /oneplatform/ {
root html;
index index.html index.htm;
proxy_pass http://192.168.2.114:1006;
}
五、负载均衡
1、什么是负载均衡?
简单的来说,就是当我有十几、几十、几百台甚至更多的服务器,需要将这些服务器组成一个服务器集群,当客户端访问其中某台服务数据时,首先发送的请求将先到一台中间的服务器,并通过中间服务器在服务器集群中平均分摊到其他服务器中。从而使用户发送的请求都将会保证服务器集群中的服务均匀平摊,以此来减轻服务器的压力,从而保持服务器的整体性能最优,降低出现崩溃的问题。
2、nginx 负载均衡的几种方式
负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:
upstream test {
server 192.16.2.114:81;
server 192.16.2.115:8081;
server 192.16.2.116:8082;
server 192.16.2.117:8083;
}
当upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
server {
listen 81;
server_name localhost;
location /test/ {
root html;
index index.html index.htm;
proxy_pass http://test;
}
}
# 2.1轮询(默认)
客户端发出的每个请求将按照时间顺序逐一分配到不同的后端服务器,如后端服务器down掉,则自动剔除
参数如下:
有如下参数:
fail_timeout:与max_fails结合使用
Max_fails:与fail_timeout结合使用,
Max_fails参数表示设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
fail_time:服务器会被认为停机的时间长度默认为10s
backup:标记该服务器为备用服务器。当主服务器停止时,请求会被发送到这里
down:标记服务永久停机了。
upstream test {
server 192.16.2.114:81;
server 192.16.2.115:8081;
server 192.16.2.116:8082;
server 192.16.2.117:8083;
}
注意
在轮询中,如果服务器down掉了,会自动剔除该服务器。
缺省配置就是轮询策略。
此策略适合服务器配置相当,无状态且短平快的服务使用。
2.2、weight(权重)
weight 代表权重,默认为1,权重越高被分配的客户端也就越多。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,从而:哪个 server 的连接数少,路由就到哪个 server 中去。
upstream test {
server 192.16.2.114:81 weight=3;
server 192.16.2.115:8081 weight=7;
}
注意:
权重越高分配到需要处理的请求越多。
此策略可以与least_conn和ip_hash结合使用。
此策略比较适合服务器的硬件配置差别比较大的情况。
2.3、ip_hash
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream test {
ip_hash;#保证每个客户访问同一台服务器
server 192.16.2.114:81 ;
server 192.16.2.115:8081;
}
注意:
在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
ip_hash不能与backup同时使用。
此策略适合有状态服务,比如session。
当有服务器需要剔除,必须手动down掉。
2.4、least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream test {
least_conn;#保证每个客户访问同一台服务器
server 192.16.2.114:81 ;
server 192.16.2.115:8081;
}
2.5第三方策略
第三方的负载均衡需要安装第三方插件
fair:按照服务器端的响应时间来分配请求,响应时间短的优先分配。
upstream test {
server 192.16.2.114:81 ;
server 192.16.2.115:8081;
fair;
}
url_hash:
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
upstream test {
server 192.16.2.114:81 ;
server 192.16.2.115:8081;
hash $request_uri; #实现每个url定向到同一个后端服务器
}
六、动态与静态页面
1、Nginx配置静态资源:
location /st/ {
alias /home/project/nginx_web/st/; #资源上传所在位置:如文件图片
autoindex on;
}
2、Nginx 配置配置静态页面:
server {
listen 442 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/cert/1_xxx.z-health.cn_bundle.crt; ##证书文件位置
ssl_certificate_key /usr/local/nginx/cert/2_xxx.z-health.cn.key; ##证书文件位置
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /home/project/nginx_web/yf; #静态页面资源位置
index index.html;
location = /sc {#访问静态页面连接
rewrite ^/.* / break;
try_files index.html =404;
}
}
山有木兮木有枝,心悦君兮君不知。