Loading
0

CentOS7.2环境源码编译安装Nginx-1.14.0

系统环境(使用上一篇文章中的环境安装):

CentOS7.2环境源码编译安装Php5.6.36


# cat /etc/redhat-releaseCentOS 
Linux release 7.2.1511 (Core)
# uname -a
Linux c72 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

准备:

所有wget下载的包默认都放在/tmp目录下

站点:http://nginx.org

下载地址:http://nginx.org/en/download.html

包地址:http://101.96.10.64/nginx.org/download/nginx-1.14.0.tar.gz


一、在上面文章中gcc gcc-c++我们已经安装过了,这次可以跳过安装或是使用以下命令安装


# yum install -y gcc gcc-c++

二、安装PCRE库


# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz 
# tar -xzvf pcre-8.42.tar.gz
# cd pcre-8.42
# ./configure && make && make install

如报错:configure: error: You need a C++ compiler for C++ support解决:yum install -y gcc gcc-c++

三、安装SSL库


# wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
# tar -xzvf openssl-1.1.0h.tar.gz
# cd openssl-1.1.0h
# ./config && make && make install

四、安装zlib库存


# wget http://zlib.net/zlib-1.2.11.tar.gz
# tar -xzvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11
# ./config && make && make install

五、安装Nginux1.14.0


# wget http://nginx.org/download/nginx-1.14.0.tar.gz 
# tar -xzvf nginx-1.14.0.tar.gz
# cd nginx-1.14.0
# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/tmp/pcre-8.42
# make && make install

(注: --with-http_ssl_module:这个不加的话后面在nginx.conf配置ssl:on后,启动会报nginx:

[emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 异常)

六、Nginx控制命令

  6.1、启动


# /usr/local/nginx/sbin/nginx
# netstat -nultp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27061/nginx: master

  6.2、重启


# /usr/local/nginx/sbin/nginx -s reload

  6.3、停止


# /usr/local/nginx/sbin/nginx -s stop
[root@c72 nginx-1.14.0]# netstat -nultp | grep nginx
[root@c72 nginx-1.14.0]#

  6.4、强制关闭


# pkill nginx

  6.5、测试配置文件是否正常


# /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

七、Web访问是否正常


# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.10.146  netmask 255.255.255.0  broadcast 172.20.10.255
        inet6 fe80::20c:29ff:febd:3af  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:03:af  txqueuelen 1000  (Ethernet)
        RX packets 44367  bytes 74779674 (71.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 26007  bytes 4245412 (4.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

浏览器访问:http://172.20.10.146,结果显示如下:

八、配置nginx支持php相关并测试


8.1、创建nginx启动用户

# useradd -u 8004 -M -s /sbin/nologin www

8.2、配置nginx支持php

# vim /usr/local/nginx/conf/nginx.conf

原配置文件:

修改为:

原配置文件:

修改为:

原配置文件:

修改为:$document_root$fastcgi_script_name;

8.3、测试是否成功

# vim /usr/local/nginx/html/php.php

添加如下:

<?php
    phpinfo();
?>
# /usr/local/nginx/sbin/nginx -s reload

访问http://172.20.10.146/php.php可以正常访问,支持php成功。

九、使用chkconfig管理nginx,并设置为开机自启动


9.1、创建启动脚本文件

# vi /etc/init.d/nginx

添加以下脚本:

#! /bin/bash
# chkconfig: 35 85 15  
# description: Nginx is an HTTP(S) server, HTTP(S) reverse
  set -e
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DESC="nginx daemon"
    NAME=nginx
    DAEMON=/usr/local/nginx/sbin/$NAME
    SCRIPTNAME=/etc/init.d/$NAME
    test -x $DAEMON || exit 0
    d_start(){
        $DAEMON || echo -n " already running"
    }
    d_stop() {
        $DAEMON -s quit || echo -n " not running"
    }
    d_reload() {
        $DAEMON -s reload || echo -n " counld not reload"
    }
    case "$1" in
    start)
        echo -n "Starting $DESC:$NAME"
        d_start
        echo "."
    ;;
    stop)
        echo -n "Stopping $DESC:$NAME"
        d_stop
        echo "."
    ;;
    reload)
        echo -n "Reloading $DESC configuration..."
        d_reload
        echo "reloaded."
    ;;
    restart)
        echo -n "Restarting $DESC: $NAME"
        d_stop
        sleep 2
        d_start
        echo "."
    ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
        exit 3
    ;;
    esac
    exit 0

然后保存退出

9.2、修改nginx文件权限

# chmod 755 /etc/init.d/nginx

9.3、将nginx添加到chkconfig管理,并验证是否添加成功

# chkconfig --add nginx

将nginx添加到chkconfig管理

然后可以使用以下命令查看是否添加成功

# chkconfig
注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
      欲查看对特定 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
nginx           0:关    1:关    2:关    3:开    4:关    5:开    6:关

9.4、将nginx设置为开机自启动并验证

# chkconfig nginx on
# chkconfig
注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
      欲查看对特定 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
nginx           0:关    1:关    2:开    3:开    4:开    5:开    6:关

经过以上方法就可以使用"service 服务名 控制命令"或"systemctl 控制命令 服务名"来控制nginx了

例1:

# service nginx start

例2:

# systemctl status nginx

十、以上方法安装之后的相关说明

10.1、配置文件位置:


# ll /usr/local/nginx/conf/nginx.conf
-rw-r--r-- 1 root root 2656 6月  30 23:44 /usr/local/nginx/conf/nginx.conf

Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,

缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值。

10.2、Server:


接收请求的服务器需要将不同的请求按规则转发到不同的后端服务器上,在 nginx 中我们可以通过构建虚拟主机(server)的概念来将这些不同的服务配置隔离。



  1. server {

  2. listen 80;

  3. server_name localhost;

  4. root html;

  5. index index.html index.htm;

  6. }



例如我们笔戈玩下的两个子项目 passport 和 wan 就可以通过在 nginx 的配置文件中配置两个 server,servername 分别为 passport.bigertech.com 和 wan.bigertech.com。这样的话不同的 url 请求就会对应到 nginx 相应的设置,转发到不同的后端服务器上。

这里的 listen 指监听端口,server_name 用来指定IP或域名,多个域名对应统一规则可以空格分开,index 用于设定访问的默认首页地址,root 指令用于指定虚拟主机的网页跟目录,这个地方可以是相对地址也可以是绝对地址。

通常情况下我们可以在 nginx.conf 中配置多个server,对不同的请求进行设置。就像这样:



  1. server {

  2. listen 80;

  3. server_name host1;

  4. root html;

  5. index index.html

  6. index.htm;

  7. }

  8. server {

  9. listen 80;

  10. server_name host2;

  11. root /data/www/html;

  12. index index.html index.htm;

  13. }



但是当 server 超过2个时,建议将不同对虚拟主机的配置放在另一个文件中,然后通过在主配置文件 nginx.conf 加上 include 指令包含进来。更便于管理。



  1. include vhosts/*.conf;



就可以把vhosts的文件都包含进去啦。

10.3、Localtion


每个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其他服务器的一个服务路径。而这个路径的匹配是通过 location 来进行的。我们可以将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。

以上面的例子,可以将root和index指令放到一个location中,那么只有在匹配到这个location时才会访问root后的内容:



  1. location / {

  2.  

  3.    root /data/www/host2; 

  4.    index index.html index.htm; 

  5. }



10.4、location 匹配规则


~ 波浪线表示执行一个正则匹配,区分大小写

~* 表示执行一个正则匹配,不区分大小写

^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录

= 进行普通字符精确匹配

匹配例子:


location = / {

# 只匹配"/". [ configuration A ]

}

location / {

# 匹配任何请求,因为所有请求都是以"/"开始 # 但是更长字符匹配或 者正则表达式匹配会优先匹配 [ configuration B ]

}

location ^~ /images/ {

# 匹配任何以 /images/ 开始的请求,并停止匹配 其它

location [ configuration C ]

}

location ~* .(gif|jpg|jpeg)$ {

# 匹配以 gif, jpg, or jpeg结尾的请求.

# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.

[ configuration D ]

}

请求:/ -> 符合configuration A

/documents/document.html -> 符合configuration B

/images/1.gif -> 符合configuration C

/documents/1.jpg ->符合 configuration D

 

10.5、静态文件映射


访问文件的配置主要有 root 和 aliasp’s 两个指令。这两个指令的区别容易弄混:

alias

alias后跟的指定目录是准确的,并且末尾必须加 /。



  1. location /c/ {

  2. alias /a/;

  3. }



root

root后跟的指定目录是上级目录,并且该上级目录下要含有和location后指定名称的同名目录才行。



  1. location /c/ {

  2. root /a/;

  3. }



如果你需要将这个目录展开,在这个location的末尾加上「autoindex on; 」就可以了

10.6、转发


配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8001 端口,只要这样:

  1. location / {

  2. proxy_pass 172.16.1.1:8001;

  3. }

这样访问host时,就都被转发到 172.16.1.1的8001端口去了。

10.7、负载均衡




  1. upstream myserver; {

  2. ip_hash;

  3. server 172.16.1.1:8001;

  4. server 172.16.1.2:8002;

  5. server 172.16.1.3;

  6. server 172.16.1.4;

  7. }

  8. location / {

  9. proxy_pass http://myserver;

  10. }



我们在 upstream 中指定了一组机器,并将这个组命名为 myserver,这样在 proxypass 中只要将请求转移到 myserver 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 ip_hash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。另外还有轮询、指定权重轮询、fair、url_hash几种调度算法。

十一、总结


以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是用 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。

扫码打赏博主扫码打赏博主

如果你认为本站解决了您的问题或得到了帮助,请自愿打赏博主,谢谢支持!

最后编辑于:2018/10/24作者: 盛行

盛行

企业应用技术爱好者,喜欢分享知识。如果文章中有错误,欢迎指正,谢谢。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

加博主Q,请注明来意。

加博主Q,请注明来意。