Linux编译安装NGINX

1、环境准备:先安装准备环境

yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 

gcc为GNU Compiler Collection的缩写,可以编译C和C++源代码等,它是GNU开发的C和C++以及其他很多种语言 的编译器(最早的时候只能编译C,后来很快进化成一个编译多种语言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)

  gcc 在编译C++源代码的阶段,只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库链接(编译过程分为编译、链接两个阶段,注意不要和可执行文件这个概念搞混,相对可执行文件来说有三个重要的概念:编译(compile)、链接(link)、加载(load)。源程序文件被编译成目标文件,多个目标文件连同库被链接成一个最终的可执行文件,可执行文件被加载到内存中运行)。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。

  gcc-c++也能编译C源代码,只不过把会把它当成C++源代码,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。

  automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。libtool是一款方便生成各种程序库的工具。

  pcre pcre-devel:在Nginx编译需要 PCRE(Perl Compatible Regular Expression),因为Nginx 的Rewrite模块和HTTP 核心模块会使用到PCRE正则表达式语法。

  zlip zlib-devel:nginx启用压缩功能的时候,需要此模块的支持。

  openssl openssl-devel:开启SSL的时候需要此模块的支持。

 2、下载nginx 安装包:  官网地址:http://nginx.org/

截止得到当前,最新的版本为1.8.1,在linux使用wget下载

这时,发现没有安装wegit

几行命令从yum源安装wget:

  yum -y install wget 

  yum -y install setup

  yum -y install perl

继续下载:


3.下载成功后进行解压:

tarxvf nginx-1.8.1.tar.gz


4、编译nginx:make

编译是为了检查系统环境是否符合编译安装的要求,比如是否有gcc编译工具,是否支持编译参数当中的模块,并根据开启的参数等生成Makefile文件为下一步做准备:

[root@Server1 nginx-1.8.1]# ./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx


make 进行编译

make install进行安装


5.验证端口是否开启:

[root@Server1 sbin]#ps-ef |grep nginx

root    1322810Apr23 ?00:00:00nginx: master process /usr/local/nginx/sbin/nginx/nginx  #nginx的主进程,只有一个主进程

nginx    13229132280Apr23 ?00:00:00nginx: worker  process #nginx工作进程,默认只有一个,可以通过修改nginx.conf中的worker_processes1; 参数启动多个工作进程

root    132951400000:01pts/000:00:00grep--color=auto nginx

[root@Server1 local]# lsof -i:8090  #显示占用8090的进程

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

nginx 13337root6uIPv459326800t0 TCP *:8090 (LISTEN)

nginx 13338nginx6uIPv459326800t0 TCP *:8090(LISTEN)

6、通过给nginx的主进程ID号发送信号启动或停止nginx:

获取nginx主进程号的办法:

[root@Server1 nginx]#cat/var/run/nginx/nginx.pid  #查看nginx的pid文件,此文件保存的就是nginx的主进程id13337  #次ID是随机的,每次启动都不一样的[root@Server1 nginx]# ps-ef  |grep nginx  #过滤nginx的进程号

root    133371000:05?00:00:00nginx: master process /usr/local/nginx/sbin/nginx/nginx

nginx    2156813337010:58?00:00:00nginx: worker process

支持的信号:

[root@Server1 nginx]#kill-QUIT13337  #平缓关闭Nginx,即不再接受新的请求,但是等当前请求处理完毕后再关闭Nginx。

[root@Server1 nginx]# kill-TERM21665 #快速停止Nginx服务

[root@Server1 nginx]# kill-HUP21703 #使用新的配置文件启动进程然后平缓停止原有的nginx进程,即平滑重启。

[root@Server1 nginx]# kill-USR121703  #重新打开配置文件,用于nginx 日志切割

日期切割的脚本:

#!/bin/bash

PID=`cat/var/run/nginx/nginx.pid`mv/var/log/nginx/access.log  /var/log/nginx/`date+%Y_%m_%d:%H:%M:%S`.access.logkill-USR1 $PID

[root@Server1 nginx]# kill-USR221703  #使用新版本的nginx文件启动服务,然后在平缓停止原有的nginx服务,即平滑升级。

[root@Server1 nginx]# kill-WINCH21703#平滑停止nginx的工作进程,用于nginx平滑升级。

扩展:

nginx 主配置文件:nginx.conf

3.1:默认配置:配置文件默认保存在path/conf当中,默认的配置文件为nginx.conf,以下是编译安装后的默认配置:

[root@Server1 conf]#grep-v"#"nginx.conf |grep-v"^$"  #全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,Nginx的PID路径,日志路径等。

worker_processes  1;  #默认启动一个工作进程

events {  #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。

    worker_connections  1024;  #设置nginx可以接受的最大并发,多个进程只和

}

http {  #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。

    include      mime.types;  #文件扩展名与文件类型映射表

    default_type  application/octet-stream; #默认文件类型

    sendfile        on; #是否调用 sendfile 函数(zero copy -->零copy方式)来输出文件,普通应用打开,可以大幅提升nginx的读文件性能,如果服务器是下载的就需要关闭,

    keepalive_timeout  65;  #长连接超时时间,单位是秒

    server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个locating模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用8090端口提供web服务、

        listen      8090;  #server的全局配置,配置监听的端口

        server_name  localhost;  #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。

        location / {  #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中提现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。

            root  html;  #相当于默认页面的目录名称,默认是相对路径,可以使用绝对路径配置。

            index  index.html index.htm;

        }

        error_page  500502503504/50x.html;  #错误页面的文件名称

        location = /50x.html {  #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。

            root  html;  #定义默认页面所在的目录

        }

    }

}

 3.2:配置nginx 主进程的启动用户和工作进程数:

user  xxxx;  #每一条指令都要以分号结尾

worker_processes  1; #可以指定启动的固定nginx进程数,或使用auto,auto是启动与当前CPU 线程相同的进程数,如CPU是四核八线程的就启动八个进程的Nginx工作进程。

3.3:绑定Nginx 工作进程到不同的CPU上:

  默认Nginx是不进行保定的,绑定并不能是当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx

工作进程在不同cpu上的跳转,减少了CPU对进程的资源分配与回收,因此可以有效的提升nginx服务器的性能,配置如下:

[root@Server1 nginx]#grepprocess /proc/cpuinfo  |wc-l #确认CPU的核心数量4四个线程CPU的配置:

worker_processes  4;

worker_cpu_affinity 0001001001001000;

八个线程CPU的配置:

worker_processes  8;

worker_cpu_affinity 0000000100000010000001000000100000010000001000000100000010000000;

3.4:PID和错误日志文件路径:

#pid        logs/nginx.pid;  #可以指定绝对路径

#error_log  logs/error.log;  #指定错误日志路径

#error_log  logs/error.log  notice;  #指定一个日志记录级别

#error_log  logs/error.loginfo;

支持的日志级别:

语法:

error_log file[ debug |info| notice | warn | error | crit ]  | [{  debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ]

日志级别 = 错误日志级别 | 调试日志级别; 或者

日志级别 = 错误日志级别;

错误日志的级别: emerg, alert, crit, error, warn, notic, info, debug,

调试日志的级别: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysql

error_log 指令的日志级别配置分为错误日志级别和调试日志级别,错误日志只能设置一个级别,而且错误日志必须书写在调试日志级别的前面,另外调试日志可以设置多个级别,其他配置方法可能无法满足需求。

 3.5:配置文件的引入:include

includefile;  #file是要导入的文件,支持相对路径,一般在html目录里面

导入一个conf文件,并配置不同主机名的页面,编辑nginx.conf主配置文件:

include  /usr/local/nginx/conf.d/samsung.conf;  #在最后一个大括号里面加入一项,*是导入任何以conf结尾的配置文件

在/usr/local/nginx/conf.d/创建一个samsung.conf,内容如下:

[root@Server1 nginx]# grep-v"#"conf.d/samsung.conf  |grep-v"^$"    server {

        listen      8090;

        server_name  samsung.chinacloudapp.cn;

        location / {

            root  html;

            index  index1.html index.htm;

        }

        error_page  500502503504/50x.html;

        location = /50x.html {

            root  html;

        }

}

摘自https://www.linuxidc.com/Linux/2017-02/140495.htm

END。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容