文章目录

  • 1、前期准备
    • 1.1 安装gcc
    • 1.2 安装其他依赖包
    • 1.3 下载安装包
  • 2、安装nginx
    • 2.1 解压nginx
    • 2.2 编译安装
    • 2.3 启动
    • 2.4 常用命令
  • 3、Nginx配置
    • use epoll 配置说明
    • log_format日志格式设置
    • nginx的upstream的几种分配方式
      • 1、轮询(默认)
      • 2、weight(加权轮询)
      • 3、ip_hash
      • 4、fair(第三方)
      • 5、url_hash(第三方)

1、前期准备

1.1 安装gcc

首先检查是否安装了gcc

[root@hadoop-master test]# gcc -v
bash: gcc: 未找到命令...

本机没有安装gcc,因此使用一下命令安装gcc

[root@hadoop-master test]# yum -y install gcc gcc-c++ autoconf automake make

安装完成之后再检查gcc版本

1.2 安装其他依赖包

其他依赖包如下,我们一次安装:pcre-devel、zlib-devel、openssl-devel

[root@hadoop-master test]# yum -y install pcre-devel zlib-devel openssl openssl-devel

1.3 下载安装包

可以在官网直接下载:http://nginx.org/download/
也可以通过如下命令行进行下载

[root@hadoop-master test]# wget http://nginx.org/download/nginx-1.9.9.tar.gz

2、安装nginx

2.1 解压nginx

文中将nginx-1.9.9.tar.gz放在目录:/usr/local
解压nginx-1.9.9.tar.gz

[root@hadoop-master local]# cd /usr/local
[root@hadoop-master local]# tar zxvf nginx-1.9.9.tar.gz

2.2 编译安装

配置

[root@hadoop-master local]# cd nginx-1.9.9/
[root@hadoop-master nginx-1.9.9]# ./configure --prefix=/usr/local/nginx

编译、安装

[root@hadoop-master nginx-1.9.9]# make
[root@hadoop-master nginx-1.9.9]# make install

检查是否安装成功

[root@hadoop-master nginx-1.9.9]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

2.3 启动

启动我们的nginx

/usr/local/nginx/sbin/nginx

访问我们虚拟机的ip地址

http://192.168.223.131/

正常的情况是如下页面:

如果访问不了,大概率的情况还是防火墙没开端口

[root@hadoop-master nginx-1.9.9]# firewall-cmd --query-port=80/tcp
no

将80端口加入到防火墙中

[root@hadoop-master nginx-1.9.9]# firewall-cmd --add-port=80/tcp --permanent
#重启防火墙
[root@hadoop-master nginx-1.9.9]# systemctl restart firewalld

再次查看端口状态

[root@hadoop-master nginx-1.9.9]# firewall-cmd --query-port=80/tcp
yes

至此,CentOS7下安装nginx结束。

2.4 常用命令

我本地的nginx命令位置:/usr/local/nginx/sbin/nginx

启动nginx,默认监听80端口

nginx

启动指定配置文件的nginx:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

快速停止服务器:

nginx -s stop

停止服务器,但要等到请求处理完毕后关闭:

nginx -s quit

重新加载配置文件:

nginx -s reload

指定配置文件重启

/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx.conf

3、Nginx配置

配置文件位置/usr/local/nginx/conf/nginx.conf 配置文件结构如下:

配置内容省略... #全局块events { #events块配置内容省略...
}http #http块
{配置内容省略... #http全局块server #server块{配置内容省略... #server全局块location [PATTERN] #location块{配置内容省略...}location [PATTERN]{配置内容省略...}}server { 配置内容省略... } 配置内容省略... #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx配置器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接收多个网络连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,但连接请求数等。
4、server块:配置虚拟机主机的相关参数,一个http中可以有多个server
5、location:配置请求路由,以及各种页面的处理情况

# 配置用户及组,默认是nobody nobody
#user  nobody;
# 工作进程:数据。根据硬件调整,通常等于CPU数量或者2倍于CPU。
worker_processes  1;# 错误日志:日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;# pid(进程标识符):存放路径。
pid        logs/nginx.pid;# 指定进程可以打开的最大描述符:数目。这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。如果总并发量超过这个数据可能会返回502错误。
worker_rlimit_nofile 102400;events {accept_mutex on; # 设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off use epoll; # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 102400; # 每个工作进程的最大连接数量。根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
}http {include       mime.types; # 文件或站名与文件类型映射表default_type  application/octet-stream; # 默认文件类型,默认为text/plain#access_log off; # 取消服务日志log_format  myFormat '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location'; # 自定义格式# 用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;access_log  logs/access.log  myFormat;# 用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;access_log  logs/host.access.404.log  log404;# 保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的。# 参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。# 在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。# 如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。# 第一次是确定存储单元的地址,第二次是在存储单元中查找键值。# 因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.server_names_hash_bucket_size 128;# 客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。client_header_buffer_size 4k;# 客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。large_client_header_buffers 8 128k;# 这个指令指定缓存是否启用open_file_cache max=102400 inactive=20s; open_file_cache_valid 30s; # 语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.open_file_cache_min_uses 2; # 语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态.open_file_cache_errors on; # 语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.# 设定通过nginx上传文件的大小(如果上传文件比较大可以修改这个值)client_max_body_size 300m;# sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。# 如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。sendfile       on;# 此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用tcp_nopush     on;# 后端服务器连接的超时时间_发起握手等候响应超时时间proxy_connect_timeout 90;# 连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)proxy_read_timeout 180;# 后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据proxy_send_timeout 180;# 设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小proxy_buffer_size 256k;# 设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8kproxy_buffers 4 256k;# 忙时buffer 的最大值。 一个客户端一次只能从一个buffer 中读取数据的同时,剩下的buffer 会被放到队列中,等待发送到客户端,这个directive 指定在这个状态下的buffer 的大小proxy_busy_buffers_size 256k;# 设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长proxy_temp_file_write_size 256k;# proxy_temp_path和proxy_cache_path指定的路径必须在同一分区proxy_temp_path /usr/local/nginx/data0/proxy_temp_dir;# 设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB。proxy_cache_path /usr/local/nginx/data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;#keepalive超时时间keepalive_timeout  120;# 也是一个 socket 选项,启用后会禁用 Nagle 算法,尽快发送数据,某些情况下可以节约 200ms#(Nagle 算法原理是:在发出去的数据还未被确认之前,新生成的小数据先存起来,凑满一个 MSS 或者等到收到确认后再发送)。# Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用 tcp_nodelay。# 可以看到 TCP_NOPUSH 是要等数据包累积到一定大小才发送,TCP_NODELAY 是要尽快发送,二者相互矛盾。实际上,它们确实可以一起用,最终的效果是先填满包,再尽快发送。tcp_nodelay on;# 如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。# 如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。# 无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误client_body_buffer_size 512k;# 我们在上线前,代码(JS、CSS 和 HTML)会做压缩,图片也会做压缩(PNGOUT、Pngcrush、JpegOptim、Gifsicle 等)。# 对于文本文件,在服务端发送响应之前进行 GZip 压缩也很重要,通常压缩后的文本大小会减小到原来的 1/4 - 1/3#gzip  on;# 表示使nginx阻止HTTP应答代码为400或者更高的应答。proxy_intercept_errors on;# nginx的upstream配置upstream bakend {ip_hash;server hadoop-master:8001;server hadoop-master:8002;server hadoop-master:8003;}server {# 配置监听端口listen       80;# 配置访问域名server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}# 这是个springboot项目/helloworld-demo就是上下文路径,指定8001,8002,8003三个端口启动location /helloworld-demo {proxy_pass http://bakend;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

use epoll 配置说明

使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
补充说明:
与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll:使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。

log_format日志格式设置

$remote_addr 与 $http_x_forwarded_for用以记录客户端的ip地址:

$remote_user: 用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent : 记录发送给客户端文件主体内容大小;
$http_referer: 用来记录从那个页面链接访问过来的;
$http_user_agent: 记录客户浏览器的相关信息;

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

nginx的upstream的几种分配方式

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream bakend {server 192.168.0.14;server 192.168.0.15;
}

2、weight(加权轮询)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:

upstream bakend {server 192.168.0.14 weight=10;server 192.168.0.15 weight=10;
}

3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:

upstream bakend {ip_hash;server 192.168.0.14:88;server 192.168.0.15:80;
}

ip_hash使用的是ip地址前三位作为hash的key,如果是内网情况下会发现所有机器都映射到一台机器,如果想实现内网的ip_hash参考《Nginx在局域网内实现真正的ip_hash负载均衡》

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend {server server1;server server2;fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;
}

注意:

upstream bakend{ # 定义负载均衡设备的Ip及设备状态ip_hash;server 127.0.0.1:9090 down;server 127.0.0.1:8080 weight=2;server 127.0.0.1:6060;server 127.0.0.1:7070 backup;
}

在需要使用负载均衡的server中增加:

proxy_pass http://bakend/;

每个设备的状态设置为:

  1. down表示单前的server暂时不参与负载
  2. weight为weight越大,负载的权重就越大。
  3. max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
  4. fail_timeout:max_fails次失败后,暂停的时间。
  5. backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录
location对URL进行匹配可以进行重定向或者进行新的代理 负载均衡

参考:
本博客 Nginx 配置之性能篇(https://imququ.com/post/my-nginx-conf-for-wpo.html)

CentOS7下安装nginx1.99相关推荐

  1. 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享

    [Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...

  2. @在 centos7 下安装 oracle 12c

    本文内容:图形界面方式在 centos 7 下安装 oracle 12c R1 网上已有很多关于如何在 linux 中安装 oracle 的博文,但很多博文都是互相抄袭或者描述不详细,比如没有说清其本 ...

  3. Centos7下安装Docker

    Centos7下安装Docker(详细的新手装逼教程) 参考: https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html 早就听说 ...

  4. linux 安装redis2.8.3,centos7下安装Redis2.8版本步骤

    Redis 简介 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zs ...

  5. linux Centos7下安装python3及pip3

    linux Centos7下安装python3及pip3 先去python官网下载python3安装包 执行命令: wget https://www.python.org/ftp/python/3.6 ...

  6. 学习笔记(1)centos7 下安装nginx

    学习笔记(1)centos7 下安装nginx 这里我是通过来自nginx.org的nginx软件包进行安装的. 1.首先为centos设置添加nginx的yum存储库 1.通过vi命令创建一个rep ...

  7. centos7下安装mariadb

    centos7下安装mariadb 参考: http://www.cnblogs.com/Netsharp/p/5875474.html https://downloads.mariadb.org/m ...

  8. CentOS7下安装GUI图形界面

    1.如何在centOS7下安装GUI图形界面 当你安装centOS7服务器版本的时候,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包. 2.在系统下使用命 ...

  9. linux添加nginx,linux下安装Nginx1.16.0的教程详解

    因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版. 服务器环境为centos,接下来是详细步骤: 安装必要依赖插件 ? 创 ...

最新文章

  1. JVM:垃圾回收相关算法
  2. Domino/Xpages Bootstrap 动态生成首页功能
  3. import 快捷键 自动调整顺序_一文搞定PPT中的快捷键
  4. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
  5. MySQL where后面的列子查询使用
  6. Jmeter(一)-精简测试脚本
  7. 学习笔记(49):Python实战编程-place布局
  8. 2016 年崛起的 JS 项目
  9. mysql sysbench_详解MySQL基准测试和sysbench工具
  10. mysql innodb 间隙锁_MySQL中InnoDB的间隙锁问题
  11. python tkinter button_[转载]Python Tkinter之Button(转载)
  12. 得物App回应“倒钩价格被炒至69999元”:已做下架处理
  13. java.sql.SQLException: ORA-28001: 口令已经失效
  14. 计算机四级知识试卷答案,计算机四级考试试题及答案
  15. python 线程池的研究及实现
  16. python中fbncc_PythonBNCCorpusReader不能处理完整的bnc语料库
  17. 《黑客帝国》效果的NB数字雨
  18. 关于安装msi的安装问题:Could not write value to key \ * \ * \ Verify that you have sufficent access to that
  19. 【数据挖掘】关联规则之Galois Closure Based Approach(基于Galois闭包的方法)
  20. 工商总局网监司给阿里发白皮书?一块神奇的里程碑

热门文章

  1. SAP系统的配置传输
  2. 结账任务 - 年终结账
  3. FUN ALV TOOLBAR 增加自定义按钮
  4. java hadoop2.6.0 读取文件报错_java 程序访问hdfs错误 hadoop2.2.0
  5. html 物流状态,css+html如何实现物流进度样式(代码示例)
  6. gettype拿不到值_被玩家强行改位置的5个英雄,他上单无解,杀吕布灭铠爹,这都拿去辅助?...
  7. android 获取u盘名字_android 获取U盘路径
  8. 银河足球队 android 8,银河足球队手机版_银河足球队安卓游戏v1.0.1-游迅网
  9. linux 报错 E: 无法定位软件包 python-lzma
  10. python字符串前加r、f、u、l 的区别