Nginx(yum、源码)安装及基础配置教程
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

一、yum安装nginx

1、添加nginx到yum源

[[email protected] ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

2、安装nginx

[[email protected] ~]# yum -y install nginx

3、启动nginx

[[email protected] ~]# systemctl start nginx
[[email protected] ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[[email protected] ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-06-15 19:37:34 CST; 1h 21min ago
     Docs: http://nginx.org/en/docs/
 Main PID: 7280 (nginx)
   CGroup: /system.slice/nginx.service
           ├─7280 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─7281 nginx: worker process
Jun 15 19:37:34 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
Jun 15 19:37:34 localhost.localdomain systemd[1]: Started nginx - high performance web server.
[[email protected] ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7280/nginx: master

4、修改节点的默认首页

[[email protected] ~]# echo  "<h1>nginx-web11111111</h1>" > /usr/share/nginx/html/index.html

二、源码安装nginx

1、安装前提软件环境

[[email protected] ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel

2、复制nginx和缓存包到/usr/src/,解压

[[email protected] ~]# useradd -s /sbin/nologin nginx
[[email protected] ~]# cd /usr/src
[[email protected] ~]# ls
debug      nginx-1.12.0.tar.gz           kernels         ngx_cache_purge-2.3.tar.gz     nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz

[[email protected] ~]# tar zxf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz 
[[email protected] ~]# tar zxf ngx_cache_purge-2.3.tar.gz 
[[email protected] ~]# tar zxf nginx-1.12.0.tar.gz 

3、编译安装nginx

[[email protected] ~]# cd /usr/src/nginx-1.12.0
[[email protected] ~]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_stub_status_module --with-http_realip_module --with-http_ssl_module \
--with-http_gzip_static_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/fcgi \
--with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module \
--add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42 \
&&make&&make install 

4、添加nginx系统服务并启动

[[email protected] ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[[email protected] ~]# mkdir -p /var/tmp/nginx/client
[[email protected] ~]# chown -R nginx:nginx /var/tmp/nginx
[[email protected] ~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
 start)
 netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
 if [ $? -eq 0 ]
 then
 echo "Nginx service already running."
 else
 $PROG -t &> /dev/null
 if [ $? -eq 0 ] ; then 
 $PROG
 echo "Nginx service start success."
 else
 $PROG -t
 fi
 fi
 ;;
 stop)
 netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
 if [ $? -eq 0 ]
 then
 kill -s QUIT $(cat $PIDF)
 echo "Nginx service stop success." 
 else
 echo "Nginx service already stop"
 fi
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 status)
 netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
 if [ $? -eq 0 ]
 then
 echo "Nginx service is running."
 else
 echo "Nginx is stop."
 fi
 ;; 
 reload)
 netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
 if [ $? -eq 0 ]
 then
 $PROG -t &> /dev/null
 if [ $? -eq 0 ] ; then
 kill -s HUP $(cat $PIDF)
 echo "reload Nginx config success."
 else
 $PROG -t
 fi
 else
 echo "Nginx service is not run." 
 fi 
 ;;
 *)
 echo "Usage: $0 {start|stop|restart|reload}"
 exit 1
esac
[[email protected] ~]# chmod +x /etc/init.d/nginx    
[[email protected] ~]# chkconfig --add nginx 
[[email protected] ~]# chkconfig nginx on
[[email protected] ~]# systemctl start nginx

5、查看版本

[[email protected] ~]# nginx -v
nginx version: nginx/1.12.0

查看模块

[[email protected] ~]# nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_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/fcgi --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42

三、基础配置

1、负载均衡与健康检查

严格来说, nginx 自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的 ngx_http_proxy_module 模块和 ngx_http_upstream_module 模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问

http {
    include       mime.types;
    default_type  application/octet-stream;
upstream backend {
    sticky;
    server 192.168.1.11:80 weight=1 max_fails=2 fail_timeout=10s;
    server 192.168.1.138:80 weight=1 max_fails=2 fail_timeout=10s;
}
……
}

注释:
weight : 轮询权值也是可以用在 ip_hash 的,默认值为 1
max_fails : 允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream模块定义的错误。
fail_timeout : 有两层含义,一是在 10s 时间内最多容许 2 次失败;二是在经历了 2 次失败以后, 10s 时间内不分配请求到这台服务器。


server {
……
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://backend;
        }
……
}

2、追踪客户端呢原始ip

server {
……
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://backend;
            proxy_redirect off;        #追踪客户端呢原始ip是否开启
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
……
}

3、启用nginx缓存

http {
……
    #access_log  logs/access.log  main;
        proxy_buffering on;    
        proxy_temp_path /usr/local/nginx/proxy_temp;        #
        proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;
……
}
server {
……
        location / {
……
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_cache my-cache;
            proxy_cache_valid 200 304 301 302 8h;
            proxy_cache_valid 404 1m;
            proxy_cache_valid any 1d;
            proxy_cache_key $host$uri$is_args$args;
            expires 30d;
        }
……
}

注释:
proxy_buffering on; 代理的时候,开启或关闭缓冲后端服务器的响应。当开启缓冲时, nginx 尽可能快地从被代理的服务器接收响应,再将它存入缓冲区中。
proxy_temp_path : 缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被 rename 一下当做缓存放在 proxy_cache_path 。 0.8.9 版本以后允许 temp和 cache 两个目录在不同文件系统上(分区),然而为了减少性能损失还是建议把它们设成一个文件系统上。
proxy_cache_path: 设置缓存目录,目录里的文件名是 cache_key 的 MD5 值。
levels=1:2 keys_zone=my-cache:50m 表示采用 2 级目录结构, 第一层目录只有一个字符,是由 levels=1:2 设置,总共二层目录,子目录名字由二个字符组成。Web 缓存区名称为 my-cache,内存缓存空间大小为 100MB,这个缓冲 zone 可以被多次使用。文件系统上看到的缓存文件名类似于 /usr/local/nginx1.10/proxy_cache/c/29/b7f54b2df7773722d382f4809d65029c 。
inactive=600 max_size=2g 表示 600 分钟没有被访问的内容自动清除,硬盘最大缓存空间为2GB,超过这个大学将清除最近最少使用的数据。

proxy_cache : 引用前面定义的缓存区 my-cache。
proxy_cache_valid : 为不同的响应状态码设置不同的缓存时间,比如 200、 302 等正常结果可以缓存的时间长点,而 404、 500 等缓存时间设置短一些,这个时间到了文件就会过期,而不论是否刚被访问过。
proxy_cache_key : 定义如何生成缓存的键, 设置 web 缓存的 key 值, nginx 根据 key 值 md5哈希存储缓存

$upstream_cache_status这个变量来显示缓存的状态,我们可以在配置中添加一个 http 头来显示这一状态,
$upstream_cache_status 包含以下几种状态:
·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答expires : 在响应头里设置 Expires:或 Cache-Control:max-age,返回给客户端的浏览器缓存失效时间。

标签: nginx, Nginx, root, proxy, http, yum, 源码, cache, lb

相关文章推荐

添加新评论,含*的栏目为必填