Nginx 编译安装

简介

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004104日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。201161日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

 

基本功能:

         静态资源的web服务器,能缓存打开的文件 描述符

         http, smtp, pop3协议的反向代理服务器,缓存、负载均衡;

         支持FastCGI (fpm)

         模块化,非DSO机制,过滤器zipSSI及图像大小调整;

         支持SSL

        

扩展功能:

         基于名称和IP的虚拟主机;

         支持keepalive

         支持平滑升级

         定制访问日志 ,支持使用日志缓冲区提高日志存储性能

         支持url rewrite

         支持路径别名

         支持基于IP及用户的访问控制

         支持速率限制,支持并发数限制

 

Nginx的特性:

         模块化设计、较好扩展性

         高可靠性

                   master–>worker

         低内存消耗

                   10000keep-alive连接在Nginx仅消耗2.5MB

         支持热部署

                   不停机而更新配置文件、更换日志文件、更新服务器程序版本

 

         支持事件驱动,AIOMMAP

 

软件获取和帮助文档

         官方地址:http://nginx.org

         目前稳定版本是:http://nginx.org/download/nginx-1.8.1.tar.gz

         帮助文档:http://nginx.org/en/docs

编译参数说明:http://nginx.org/en/docs/configure.html

 

安装前装备

操作系统:CentOS 6.7 64

Nginx 版本:nginx-1.8.1

Web服务器ip:172.28.0.59

 

1.  配置好IPDNS 、网关,确保使用远程连接工具能够连接服务器

2.  配置防火墙,iptables –F 清理防火墙规则或者关闭iptables

3.  关闭SELINUX, setenforce 0  #立即生效(实际是宽容模式)

 

安装配置

1、  解决依赖关系

编译安装nginx需要事先需要安装开发包组"Development Tools" "Development Libraries"。同时,还需要专门安装pcre-devel包:

yum -y groupinstall "Development tools" "Server Platform Development"

yum -y install pcre-devel  openssl-devel

 

2、安装

首先添加用户nginx,实现以之运行nginx服务进程:

groupadd -r nginx    #创建系统组nginx

useradd -g nginx -r nginx  -s /sbin/nologin #创建用户nginx并添加进nginx

 

3、接着开始编译和安装:

./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –user=nginx –group=nginx –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx/nginx.pid –lock-path=/var/lock/nginx.lock –with-http_ssl_module –with-http_stub_status_module –with-http_gzip_static_module –with-http_flv_module –with-http_mp4_module –http-client-body-temp-path=/var/tmp/nginx/client –http-proxy-temp-path=/var/tmp/nginx/proxy –http-fastcgi-temp-path=/var/tmp/nginx/fastcgi

 

make && make install

mkdir -pv /var/tmp/nginx/{client,fastcgi,proxy,uwsgi}   #创建以上指定的几个目录

 

   4、部分编译参数说明

    –conf-path=/etc/nginx/nginx.conf                   #主进程安装的路径

–user=nginx –group=nginx                      #启动程序的用户

–error-log-path=/var/log/nginx/error.log      #错误日志的路径

–http-log-path=/var/log/nginx/access.log    #正常日志的文件路径

–pid-path=/var/run/nginx/nginx.pid              #pid 文件路径

–lock-path=/var/lock/nginx.lock             #锁文件路径

–with-http_ssl_module                                      #支持https

–with-http_stub_status_module                     #支持状态监控

–with-http_gzip_static_module                       #支持gzip压缩

–with-http_flv_module                             #流媒体支持

–with-http_mp4_module                                  #mp4支持

–http-client-body-temp-path=/var/tmp/nginx/client      #设定http客户端请求临时文件路径

–http-proxy-temp-path=/var/tmp/nginx/proxy             #设定http代理临时文件路径

–http-fastcgi-temp-path=/var/tmp/nginx/fastcgi            #设定http fastcgi临时文件路径

        

  5、为nginx提供SysV init脚本:

   新建文件/etc/rc.d/init.d/nginx,内容如下:

#!/bin/sh

#

# nginx – this script starts and stops the nginx daemon

#

# chkconfig:   – 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

 

# Source function library.

. /etc/rc.d/init.d/functions

 

# Source networking configuration.

. /etc/sysconfig/network

 

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

 

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

 

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

 

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

 

lockfile=/var/lock/subsys/nginx

 

make_dirs() {

   # make required directories

   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*–user=\([^ ]*\).*/\1/g' -`

   options=`$nginx -V 2>&1 | grep 'configure arguments:'`

   for opt in $options; do

       if [ `echo $opt | grep '.*-temp-path'` ]; then

           value=`echo $opt | cut -d "=" -f 2`

           if [ ! -d "$value" ]; then

               # echo "creating" $value

               mkdir -p $value && chown -R $user $value

           fi

       fi

   done

}

 

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    make_dirs

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

 

stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}

 

restart() {

    configtest || return $?

    stop

    sleep 1

    start

}

 

reload() {

    configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}

 

force_reload() {

    restart

}

 

configtest() {

  $nginx -t -c $NGINX_CONF_FILE

}

 

rh_status() {

    status $prog

}

 

rh_status_q() {

    rh_status >/dev/null 2>&1

}

 

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

        exit 2

esac

 

而后为此脚本赋予执行权限:

chmod +x /etc/rc.d/init.d/nginx

添加至服务管理列表,并让其开机自动启动:

chkconfig –add nginx

chkconfig nginx on

 

设置一个连接方便以后检查语法使用

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

 

而后就可以启动服务并测试:

service nginx start            #启动nginx

netstat –nltp                       #查看是否监听80端口

blob.png

blob.png

 

6、配置主页面

         /etc/nginx/nginx.conf                #主配置文件

         /usr/local/nginx/html                #网站根目录

         /usr/local/nginx/sbin/nginx              #nginx主程序

 

         cd /usr/local/nginx/html

         vi index.html

         <h1> welcome to china! </h1>

This is test site

 

Service nginx reload         #重新加载配置文件

blob.png

 

nginx 基本功能实现

1、  配置虚拟主机

mkdir -pv /vhosts/web1

vi /vhosts/web1/index.html

           www.web1.com

vi /etc/nginx/nginx.conf

   server {

        listen  8080;    

        server_name www.test.com;

        location  / {

                root /vhosts/web1;

                index  index.html index.htm;

        }

          }

 

nginx –t   #检查语法错误

blob.png

service nginx reload  #重新加载配置文件

blob.png

2、  基于用户认证

基于用户的basic认证配置:

           auth_basic "test"    #显示名字是test,可以随意填写

           auth_basic_user_file      #账号文件路径

                    htpasswd命令创建用户账号文件;

 

                    例子:

vi /etc/nginx/nginx.conf

     server {

        listen  8080;

        server_name www.stu1.com;

               location  / {

               root /vhosts/web1;

               auth_basic "www.stu1.com";  

               auth_basic_user_file /vhosts/web1/.passwd;

        }

}

安装httpd-tools 工具

yum -y install httpd-tools

htpasswd -c -m /www/html/.passwd centos    #创建centos用户

nginx -t    #检查Nginx配置文件语法

service nginx reload

blob.png

3、  基于IP认证访问控制

http, server, location        #这几个里面都可以配置

allow         IP/Network

deny        IP/Network

例子:

vi /etc/nginx/nginx.conf

     server {

        listen  8080;

        server_name www.stu1.com;

               location  / {

               root /vhosts/web1;

deny 172.28.1.0/24;

               allow all;

       }

}

 

service nginx reload  重新加载配置文件

blob.png

4、  重定向错误页面

error_page code […] [=code] URI | @name

根据http状态码重定向错误页面

error_page  404   /404.html

=[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

 

例子:

vi /etc/nginx/nginx.conf

     server {

        listen  8080;

        server_name www.stu1.com;

               location  / {

               root /vhosts/web1;

                               error_page 404 =200  /404_customed.html;

       }

}

vi /vhosts/web1/404_customed.html

<h1>o_o,Wrong.</h1>

 

blob.png

 

5、  基于gzip压缩

vi /etc/nginx/nginx.conf

 

server {

listen  8080;

server_name www.stu1.com;

       location  / {

       root /vhosts/web1;

       gzip on;

       gzip_comp_level 6;

         }

}

 

Service nginx reload

blob.png

blob.png

 

6、  定制响应首部

add_header name value [always];

expires

例子:

vi /etc/nginx/nginx.conf

 

             server {

        listen 8080;

        server_name www.stu1.com;

        location / {

        root "/vhosts/web1";

        expires 24h;              #控制页面缓存时间的作用

        add_header stu1 admin;          #响应首部

 

        }

    }

 

service nginx reload

blob.png

7、  URL 重定向

     rewrite regex replacement [flag];

         last            #rewrite规则重写完成后,就不在后面其他的rewrite规则进行处理,而是由User Agent 重新对重写后的URL再一次发起请求,并从头开始执行类似的过程

         break        #一旦此rewrite规则重写完成后,由User Agent 对新的URL重新发起请求,且不再会被当前location内的任何rewrite 规则所检查

         redirect             #302响应码(临时重定向)返回新的URL

                   permanent       #301响应码(永久重定向)返回新的URL

例子:

vi /etc/nginx/nginx.conf

 

    server {

        listen 8080;

        server_name www.stu1.com;

        location / {

        root "/vhosts/web1";

        rewrite ^/images/(.*)$ /imgs/$1 break;

        }

}

         mkdir -pv /vhosts/web1/{images,imgs}

         vi /vhosts/web1/images/index.htm

                   /vhosts/web1/images/

         vi /vhosts/web1/imgs/index.htm

                  /vhosts/web1/imgs

 

service nginx reload

blob.png

 

8、  开启Nginx状态监控的功能

vi /etc/nginx/nginx.conf

 

    server {

        listen 8080;

        server_name www.stu1.com;

        location / {

        root "/vhosts/web1";

      }

        location /status {

                stub_status on;

                access_log off;

                allow 192.168.1.0/24;

                deny all;

      }                 

}

blob.png

 

9、  防盗链

   server {

        listen 80;

        server_name www.stu1.com;

        location / {

        root "/vhosts/web1";

      }

        location ~*\.(jpg|gif|gpeg|png)$ {

                valid_referers none blocked www.stu1.com;

                if ($invalid_referer) {

                rewrite ^/ http://www.stu1.com/403.html;

            }

       }

}

 

vi /vhosts/web1/index.html

Test Page

<img src="http://www.stu1.com/123.jpg">

 

 service nginx reload

blob.png

10、         https 服务

a)         创建私有CA并自签证书

cd /etc/pki/CA

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

touch serial index.txt

echo 01 > serial

b)        创建nginx证书

 cd /etc/nginx/

mkdir ssl

cd ssl/

(umask 077; openssl genrsa -out nginx.key 1024)

openssl req -new -key nginx.key -out nginx.csr

c)   签署证书

openssl ca -in nginx.csr -out nginx.crt -days 365

d)        修改nginx主配置文件

server {

        listen       443 ssl;

        server_name  www.stu1.com;

        ssl_certificate      /etc/nginx/ssl/nginx.crt;

        ssl_certificate_key  /etc/nginx/ssl/nginx.key;

        location / {

            root   /vhosts/web1;

            index  index.html index.htm;

        }

 

nginx –t

service nginx reload

blob.png

原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/61406

(0)
liangkailiangkai
上一篇 2016-12-01
下一篇 2016-12-01

相关推荐

  • CentOS6 ELK实现

    1 简介 我们来介绍Centos6.5基于SSL密码认证部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同时为大家介绍如何集合如上组件来收集日志,本章的日志收集主要为大家介绍SYSTEM日志收集. 集中化日志收集主要应用场景是在同一个窗口临时性或永久性鉴定分析系统,应用等各类日志,对用户提供极大便利,同时也…

    2015-02-15
  • Linux基础(七)-软RAID,LVM,bash脚本之循环

    1.创建一个10G的分区,并格式为ext4的文件系统; (1)要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;(2)挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]# fdisk /dev/sdb We…

    Linux干货 2016-11-06
  • Linux系统管理常用命令

    系统管理工具 进程的分类: CPU-Bound:CPU密集型,非交互。特别消耗CPU的,加密解密,压缩解压 IO-Bound:IO密集型,交互。大量的硬盘读写,例如复制文件 Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pki…

    Linux干货 2017-12-18
  • 网络第21期第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# fdisk /dev/sdb WARNING: DOS-compatible m…

    Linux干货 2016-10-09
  • Linux系统启动过程中grub故障与修复(一)

    GRUB 是引导装入器 — 它负责装入内核并引导 Linux 系统。GRUB 可以引导多种操作系统,如Linux、 DOS、 Windows 。 GRUB共分为三个阶段:stage1主要负责BIOS和GRUB之间的交接,载入存放于各个分区中的开机文件;stage1.5是连接stage1和stage2之间的通道,起着过渡的作用,负责识别stage2所在/bo…

    2017-09-03
  • PXE自动化安装系统

    PXE自动化安装的流程: 开机自检 > 加载ROM中的bios代码 > 检查设备启动顺序,由于PXE自动安装是基于网卡作引导的,所以,会选择网卡 > 网卡中会有PXE的模块,从dhcp服务器获取ip地址 掩码 网关 dns 重要的是tftp服务器的地址 从tftp服务器需要获取的bootloder的文件名的信息 > 从tftp中加载p…

    Linux干货 2015-08-11