NGINX服务源码搭建与配置详解 (一)

官网下载nginx源码包

nginx 工作原理
nginx 由core内核和各个模块组成,core内核查找配置文件,将用户请求匹配location block 模块,调用location block(匹配url) 块中的模块(比如/root /proxy_pass ) 比如获取到proxy_pass模块后把请求转给后端做代理,后端把数据返给代理后转发给用户

nginx的安装方式:

源码安装部署
官网下载源码包
在这里插入图片描述

[root@node4 src]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@node4 src]# tar xf nginx-1.18.0.tar.gz
安装依赖包
安装依赖包
[root@node4 src] yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
进入刚解压的目录
[root@node4 src]# cd nginx-1.18.0
[root@node4 nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
预编译
预编译主要是用来检查系统环境是否满足安装软件包的条件
并生成Makefile文件,该文件为编译、安装、升级nginx指明了相应参数。
[root@node4 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx

./configure --help 可以查看预编译参数
--prefix 指定nginx编译安装的目录;
--user=*** 指定nginx的属主
--group=*** 指定nginx的属主与属组
--with-*** 指定编译某模块
--without-** 指定不编译某模块
--add-module 编译第三方模块
[root@node4 nginx-1.18.0]# cat Makefile  #查看预编译生成的Makefile文件

default:	build

clean:         #make clean 删除上次的编译文件
	rm -rf Makefile objs

build:        # make build : 编译,默认参数,可省略build参数
	$(MAKE) -f objs/Makefile

install:     #安装
	$(MAKE) -f objs/Makefile install

modules:     #make modules 编译模块
	$(MAKE) -f objs/Makefile modules

upgrade:     #在线升级
	/usr/local/nginx/sbin/nginx -t

	kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
	sleep 1
	test -f /usr/local/nginx/logs/nginx.pid.oldbin

	kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

编译并安装
[root@node4 nginx-1.18.0]# make && make install #编译并安装
[root@node4 nginx-1.18.0]# /usr/local/nginx/sbin/nginx -V #查看版本
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx
启动nginx服务
[root@node4 nginx-1.18.0]# /usr/local/nginx/sbin/nginx
查看nginx进程
[root@node4 nginx-1.18.0]# ps -ef | grep nginx
root       7777      1  0 11:53 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     7780   7777  0 11:53 ?        00:00:00 nginx: worker process
root       7837   4148  0 12:07 pts/0    00:00:00 grep --color=auto nginx

设置nginx别名
[root@node4 nginx-1.18.0]# alias nginx=/usr/local/nginx/sbin/nginx #临时生效nginx别名
[root@node4 nginx-1.18.0]# vim /root/.bashrc #设置永久生效,在文件中添加以下
alias nginx=/usr/local/nginx/sbin/nginx 
[root@node4 nginx-1.18.0]# nginx #执行nginx可启动服务

#也可以通过变量来设置
echo "export PATH=/usr/local/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh
然后重新读取下配置文件
source /etc/profile
常用命令
[root@node4 nginx-1.18.0]# nginx  #启动nginx
[root@node4 nginx-1.18.0]# nginx -s stop #停止服务
[root@node4 nginx-1.18.0]# nginx -s quit #退出服务
[root@node4 nginx-1.18.0]# nginx -s reload  #重载文件
语法高亮
[root@scyun nginx-1.18.0]# ls  #进入源码目录
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@scyun nginx-1.18.0]# cd contrib/
[root@scyun contrib]# ls
geo2nginx.pl  README  unicode2nginx  vim
[root@scyun contrib]# cp -r vim/* /usr/share/vim/vimfiles/
#把源码包目录contrib/vim/*文件复制到/usr/share/vim/vimfiles/

nginx配置文件

nginx配置文件路径

源码安装就是前面指定–prefix=路径
yum安装在/etc/nginx/目录(主配置文件)与/etc/nginx/conf.d目录下


[root@node4 conf]# ll /usr/local/nginx/conf/
总用量 68
-rw-r--r-- 1 root root 1077 1221 11:41 fastcgi.conf
-rw-r--r-- 1 root root 1077 1221 11:41 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 1221 11:41 fastcgi_params
-rw-r--r-- 1 root root 1007 1221 11:41 fastcgi_params.default
-rw-r--r-- 1 root root 2837 1221 11:41 koi-utf
-rw-r--r-- 1 root root 2223 1221 11:41 koi-win
-rw-r--r-- 1 root root 5231 1221 11:41 mime.types
-rw-r--r-- 1 root root 5231 1221 11:41 mime.types.default
-rw-r--r-- 1 root root 2656 1221 11:41 nginx.conf
-rw-r--r-- 1 root root 2656 1221 11:41 nginx.conf.default
-rw-r--r-- 1 root root  636 1221 11:41 scgi_params
-rw-r--r-- 1 root root  636 1221 11:41 scgi_params.default
-rw-r--r-- 1 root root  664 1221 11:41 uwsgi_params
-rw-r--r-- 1 root root  664 1221 11:41 uwsgi_params.default
-rw-r--r-- 1 root root 3610 1221 11:41 win-utf

nginx 配置文件详解
Nginx的配置文件nginx.conf位于其安装目录的conf目录下。
nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。

main块设置的指令将影响其他所有设置;
server块的指令主要用于指定主机和端口;
upstream指令主要用于负载均衡,设置一系列的后端服务器;
location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
nginx的全局配置
#user  nobody;  #指定nginx的工作进程的用户及用户组,默认是nobody用户
worker_processes  1;  #指定工作进程的个数,默认是1个。具体可以根据服
务器cpu数量进行设置,也可以设置auto

#error_log  logs/error.log; #设置nginx的错误日志路径,并设置相应的输出级别。
日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;  #是个主模块指令,用来指定进程pid的存储文件位置


events {   #事件指令是设定Nginx的工作模式及连接数上限:
    worker_connections  1024;  #定义每个工作进程的最大连接数,默认是1024
}

http指令块配置
http {
    include       mime.types;  #定义数据类型
    default_type  application/octet-stream; #设定默认类型为二进制流,也就是当文件类型未定
义时使用这种方式,

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;   #参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; #设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接

    #gzip  on; 用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流
gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大;
gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果;
gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可;
gzip_comp_level用来指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源;
gzip_types用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的;
gzip_vary选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
server虚拟主机配置
server {    #用来定义虚拟主机
        listen       80;   #设置监听端口,默认为80端口
        server_name  localhost; #域名,多个域名通过逗号或者空格隔开

        #charset koi8-r;  #设置网页的默认编码格式

        #access_log  logs/host.access.log  main;  #指定该虚拟主机的独立访问日志,会覆盖前面的全局配置

        location / {    #定义请求匹配规则
            root   html; #指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
            index  index.html index.htm;  #用于设定访问的默认首页地址
        }

        #error_page  404              /404.html;  #定义访问错误返回的页面

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;   #凡是状态码是500 502 503 504 都会返回这个页面
        location = /50x.html {
            root   html;
        }

location匹配配置
location ~ \.php$ {   #凡是以php结尾文件,都会匹配到这条规则
            root           html;   #php文件存放的目录
           fastcgi_pass   127.0.0.1:9000;   #指定php-fpm进程管理的ip端口或者unix套接字
            fastcgi_index  index.php;   #指定php脚本目录下的索引文件
            fastcgi_param  SCRIPT_FILENAME  #指定传递给FastCGI服务器的参数 /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

         deny access to .htaccess files, if Apache's document root
         concurs with nginx's one
        
        location ~ /\.ht {   #凡是请求类似.ht资源,都拒绝
            deny  all;  #拒绝所以
        }

nginx在线升级

方案一

查看原编译参数
升级一般是添加新的模块,或者升级版本,所以要参考以前编译的模块,如果
不添加,那么以前的模块就不能使用了
[root@node4 conf]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx

预编译,编译安装
[root@node4 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx/ #预编译
[root@node4 nginx-1.18.0]# make && make install 编译安装
[root@node4 nginx-1.18.0]# make upgrade  #升级 进程替换自动完成的,他会把老进程直接干掉,回退复杂

方案二

[root@node4 nginx-1.16.1]# nginx -V
nginx version: nginx/1.61.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx/
#编译安装
[root@node4 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx/ #预编译
[root@node4 nginx-1.18.0]# make && make install 编译安装
[root@node4 src]# cd /usr/local/nginx/sbin/
[root@node4 sbin]# ls
nginx  nginx.old

生成新的master进程
[root@node4 sbin]# ps -ef | grep nginx  #15178 老的master进程
root      15178      1  0 13:16 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15179  15178  0 13:16 ?        00:00:00 nginx: worker process
root      15186   4148  0 13:21 pts/0    00:00:00 grep --color=auto nginx

[root@node4 sbin]# kill -USR2 15178  #生成新进程 下方15188新进程
[root@node4 sbin]# !ps
ps -ef | grep nginx
root      15178      1  0 13:16 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15179  15178  0 13:16 ?        00:00:00 nginx: worker process
root      15188  15178  0 13:22 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15189  15188  0 13:22 ?        00:00:00 nginx: worker process
root      15191   4148  0 13:22 pts/0    00:00:00 grep --color=auto nginx

[root@node4 sbin]# kill -winch 15178  退出老的master进程
[root@node4 sbin]# !ps
ps -ef | grep nginx
root      15178      1  0 13:16 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root      15188  15178  0 13:22 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15189  15188  0 13:22 ?        00:00:00 nginx: worker process
root      15194   4148  0 13:24 pts/0    00:00:00 grep --color=auto nginx
[root@node4 sbin]# kill -quit 15178 #退出老进程,升级结束 也可观察几天再退出

如新进程有问题可回滚操作
换回nginx文件
# 先删除新的nginx二进制文件:
rm -rf /usr/local/nginx/sbin/nginx
# 还原老的nginx 二进制文件:
mv /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
[root@node4 sbin]# kill -hup 15178 拉起老的master进程
[root@node4 sbin]# !ps
ps -ef | grep nginx
root      15178      1  0 13:16 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root      15188  15178  0 13:22 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15189  15188  0 13:22 ?        00:00:00 nginx: worker process
nobody    15195  15178  0 13:26 ?        00:00:00 nginx: worker process
root      15197   4148  0 13:27 pts/0    00:00:00 grep --color=auto nginx


[root@node4 sbin]# kill -quit 15188 #退出新生成的master进程
[root@node4 sbin]# !ps
ps -ef | grep nginx
root      15178      1  0 13:16 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    15195  15178  0 13:26 ?        00:00:00 nginx: worker process
root      15200   4148  0 13:29 pts/0    00:00:00 grep --color=auto nginx

nginx七层负载均衡

戳我找七层负载←

nginx 报错代码
404 文件找不到
403 权限拒绝
500 内部错误,程序问题 ,web问题
502 均衡后端问题
503 后端程序访问异常
504 网关超时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦读

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值