nginx安装-配置

1 什么是nginx

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,

并且cpu、内存等资源消耗却非常低,运行非常稳定。

2 应用场景

1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,

需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,

不会因为某台服务器负载高宕机而某台服务器闲置的情况。

2 nginx安装

yum方式安装:

nginx的安装配置;
    
    1. 官网安装方案地址: http://nginx.org/en/linux_packages.html#RHEL-CentOS
    
    步骤一:
    sudo yum install yum-utils
    步骤二:
    vim /etc/yum.repos.d/nginx.repo
    将如下内容copy进 新建的 nginx.repo 文件内;
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

    步骤三(可省略,该步骤切换安装的nginx版本 从 稳定版本 变成 主线版本)
    sudo yum-config-manager --enable nginx-mainline
    步骤四:
    sudo yum install nginx
    步骤五:
    service nginx status  -- 查看nginx状态
    nginx  --启动nginx
    步骤六:
    防火墙操作:
    yum install firewalld  -- 没有安装firewalld时,进行安装
    firewall-cmd --state  -- 查询防火墙状态
    firewall-cmd --list-ports -- 查看开放端口
    firewall-cmd --reload     -- 重启
    systemctl start firewalld  -- 启动防火墙
    systemctl stop firewalld  -- 关闭防火墙
    开启端口:
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    重新加载配置
    service iptables restart
    
自动安装的目录在: /etc/nginx/

问题:
    访问nginx出现 404页面 
    尝试通过 ping 操作是否通,
    然后telnet 端口是否能通,telnet不通时考虑开启防火墙和端口,打通之后进行访问

2 下载编译安装

官方网址:nginx: download

官网提供三种版本:

Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版

2 安装要求的环境

下面的环境需要视自己的系统情况而定,没有的环境安装以下就好。

1.需要安装gcc环境

# yum install gcc-c++

2.第三方的开发包

1 PERE

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。

nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库

# yum install -y pcre pcre-devel

2 zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

# yum install -y zlib zlib-devel

3 openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,

并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

# yum -y install pcre  pcre-devel zlib  zlib-devel openssl openssl-devel

3 nginx安装过程

1 把nginx源码包上传到linux系统上

2 解压到/usr/local下面

# tar -xvf nginx-1.14.0.tar.gz -C /usr/local

3 使用cofigure命令创建一个makeFile文件

执行下面的命令的时候,一定要进入到nginx-1.14.0目录里面去。

 ./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \--with-http_stub_status_module \--with-http_ssl_module \--with-file-aio \--with-http_realip_module

如果没有makeFile文件,编译的时候会报错

\ 表示命令还没有输入完,换行的意思。

--prefix=/usr/local/nginx  表示软件安装到/usr/local/nginx下面。
这个make install 的时候就不用在指定安装路径。
执行完成后查看目录里面已经多了一个Makefile文件

注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,

需要在/var下创建temp及nginx目

4 创建目录/var/temp/nginx/

# mkdir /var/temp/nginx -p

-p 表示级联创建的意思

5 进入nginx-1.14.0里面执行make命令进行编译

 

6 进入nginx-1.14.0里面执行make install 命令进行安装

 这里不需要再次执行安装路径,创建makefile文件的时候已经指定了。

7 进入安装位置/usr/local/nginx查看目录结构

其中html是里面首页html文件。conf里面是配置文件。sbin里面只执行文件。

3 启动nginx

进入sbin目录,执行命令./nginx

[root@admin sbin]# ./nginx

4 查看nginx是否启动

[root@admin sbin]# ps -aux | grep nginx

ps命令用于报告当前系统的进程状态。

-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。

a:显示现行终端机下的所有程序,包括其他用户的程序。

u:以用户为主的格式来显示程序状况。

x:显示所有程序,不以终端机来区分。

5 关闭nginx

[root@admin sbin]#  ./nginx -s stop

或者

[root@admin sbin]# ./nginx -s quit

6 重启nginx

先关闭,然后启动

7 刷新配置文件

[root@admin sbin]# ./nginx -s reload

8 关闭防火墙,开启远程访问

首先需要关闭防火墙:默认端口是80

方法一:永久开放80端口

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save

方法二:临时关闭系统防火墙

# service iptables stop  

方法三:永久关闭修改配置开机不启动防火墙

# chkconfig iptables off 

特殊:针对阿里云

需要添加安全组规则

9 访问nginx

ngnix.conf文件


user  root;
worker_processes  1;  #工作线程数,建议与cpu数量一致

#error_log  logs/error.log;  #日志目录
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #指定进程id的存储文件位置

#工作模式及连接数上限
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,仅用于linux2.6以上内核,可以大大提高nginx的性能
    #use   epoll; 

    #单个后台worker process进程的最大并发链接数    
    worker_connections  1024;

    # 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值
    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
    # worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
    # $ cat /proc/sys/fs/file-max
    # 输出 34336
    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
    # 使得并发总数小于操作系统可以打开的最大文件数目
    # 其实质也就是根据主机的物理CPU和内存进行配置
    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
    # ulimit -SHn 65535
}
http {
  #设定mime类型,类型由mime.type文件定义
    include       mime.types; # include 指令用于包含拆分的配置文件
    default_type  application/octet-stream;
    
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime. 
    #开启高效传输模式
    sendfile        on;
    
    # tcp_nopush,tcp_nodelay设置on,防止网络阻塞
    #tcp_nopush    on;  
    #tcp_nodelay    on; 
    
    #连接超时时间 #指定客户端连接保持活动的超时时间
    keepalive_timeout  65;
    #指定客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
    #client_header_timeout  10;
    #指定客户端请求主体读取超时时间,如果超过这个时间���客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
    #client_body_timeout  10;
    #指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接
    #send_timeout        10;

    #开启gzip压缩
    gzip  on;
    #设置允许压缩的页面最小字节数
    #gzip_min_length  1k;
    #指定内存空间来存贮压缩结果,这里指定4个单位为16k的内存来存储压缩结果,即总大小为64k
    #gzip_buffers    4  16k; 
    #指定识别HTTP协议版本,默认是1.1
    #gzip_http_version  1.1;
    #指定gzip压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源
    #gzip_comp_level  2;
    #指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩
    #gzip_types  text/plain application/x-javascript text/css application/xml;
    #该选项开启可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Varnish缓存经过Nginx压缩的数据
    #gzip_vary  on;
    
    #设置允许客户端请求的最大的单个文件字节数
    #client_max_body_size  20m; 
    #设定请求缓冲#指定来自客户端请求头的headerbuffer大小,如果自定义了消息头或有更大的cookie,可以在这里增加缓冲大小
    #client_header_buffer_size    128k;
    #指定客户端请求中较大的消息头的缓存最大数量和大小,4为个数,32k为大小,最大缓存为4个32kb
    #large_client_header_buffers  4 128k;
    
    #定义一组服务器。设定负载均衡后台服务器列表  这些服务器可以监听不同的端口。
    #而且,监听在TCP和UNIX域套接字的服务器可以混用。
    upstream exactnesstest {

#weight是设置权重,权重越大,请求被分发过来的可能性就越大,
        server 192.22.0.12:9090   weight=2;

    }
     #upstream  backend  { 
              #ip_hash; 
            #  server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
            #  server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
   # }
     #设定虚拟主机配置
    server {
        listen       7800;  #侦听7800端口
        server_name  localhost;  #定义使用 localhost访问
        
        #指定Nginx默认的字符集,只有utf-8支持中文字符
        #charset utf-8;
        
        #定义服务器的默认网站根目录位置
        #root html;
        
        #设定本虚拟主机的访问日志
        #access_log  logs/nginx.access.log  main;
        
        # 定义错误提示页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html; #指定网页根目录
        }
          #静态文件,nginx自己处理
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|eot|svg|ttf|woff)$
        { 
          root            /home/nginx/nginx/dist; #指定网页根目录
          #过期30天,静态文件不怎么更新,过期可以设大一点,
          #如果频繁更新,则可以设置得小一点。
          expires         30d;
        }
        #默认请求
        location / {
            root   /home/nginx/nginx/dist; #指定网页根目录
            #定义首页索引文件的名称 #设定默认首页
            index  index.html index.htm; 
        } 
        location /system {    
            rewrite  ^/system/(.*)$ /$1 break;
            proxy_pass http://exactnesstest;
        }

    }  
}


负载均衡

 1)轮询

  最基本的配置方法,是upstream模块默认的负载均衡策略。每个请求会按时间顺序平均分配到不同的后端服务器。有如下参数:

fail_timeout与max_fails结合使用
max_fails在fail_timeout参数设置的时间内最大失败次数。如果在这个时间内,所有该服务器的请求都失败了,那么认为该服务器停机
fail_time服务器被认为停机的时长,默认10s(被认为停机的服务器尝试间隔?)
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里
down标记服务器永久停机

  注意:1.down标记的服务器会自动剔除;2.缺省就是轮询;3.此策略适合服务器配置无状态且短平块的服务使用

 2)weight

  权重方式,在轮询策略的基础上指定轮询的几率。也可以认为是在轮询的基础上新增了一个weight的参数,此参数指定轮询的几率,值为number。upstream模块配置模板如下:

1

2

3

4

5

upstream [服务器组名称]{

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

  在该例子中,没有weight参数的服务器默认为1,weight的数值与访问比例成正比,所有weight值的总和为一个循环单位,服务器自身的weight值为循环单位内的轮询次数。

  注意:1.权重越高分配到的请求越多;2.此策略可以和least_conn策略、iphash策略结合使用;3.此策略比较适合服务器硬件配置差距较大的情况。

 3)ip_hash

  依据ip分配方式,指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端请求一致发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  ip_hash;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

  注意:1.nginx1.3.1之前的版本不能在ip_hash中使用权重(weight);2..ip_hash不能与backup同时使用;3.此策略适合有状态服务的程序,比如session;4.当有服务器需要剔除,必须手动down掉。

 4)least_conn

  最少连接方式,把请求发给链接数最少的后端服务器。轮询是把请求平均分配给各个后端,使它们的负载大致相同。但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  least_conn;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

  注意:此策略适合请求处理时间长短不一造成的服务器过载情况。

 5)fair

  响应时间方式,按照服务器端的响应时间来分配请求,响应时间短的优先分配。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

  fair;

}

  注意:需要安装第三方插件。

 6)url_hash

  url分配方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以在缓存中读取。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  hash $request_uri;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

  注意:1.需要安装第三方插件;2.uri,是i,不是小写的L。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值