Nginx入门学习

nginx系列

简介

nginx 是HTTP和反向代理服务器,邮件代理服务器和通用TCP/UDP代理服务器。总之一句话,nginx很火很牛逼就对了。

download

下载地址:http://nginx.org/en/download.html
mainline:最新版本
stable:稳定版本
下载命令:

1
2
wget [下载地址]
tar -zxvf [压缩包]

目录介绍

auto:辅助configure文件的执行
CHANGES:不同版本的特性
conf:示例文件
configure:用于生成中间文件,执行编译前的必须动作
contrib:vim nginx文件时显示的样式,用法 cp contrib/vim/* ~/.vim/
html::nginx的默认html文件
man:nginx的帮助文件
src:nginx源代码

安装

.configure --xxx

–prefix=PATH nginx安装目录的前缀
–with-xxx 默认不会编译进nginx,需要则写到命令行
–without-xxx 默认编译进nginx,不需要则写到命令行

最普通的configure编译命令为
.configure --prefix=/usr/local/nginx
执行完命令则生成objs目录,存放中间文件,objs/ngx_modules.c 文件决定哪些模块安装到nginx。

make编译:make,执行完后生成大量的中间文件,都会存放到objs/src目录中。
安装:make install

Nginx命令行

-c 指定配置文件
-g 指定配置的指令
-p 指定运行目录
-s stop 立刻停止服务; quit 优雅的停止服务;reload 重载配置文件;reopen 重新开始记录日志文件
-t 测试配置文件语法是否有错误
-v 版本信息

重载配置文件

修改nginx配置文件的内容后,需要nginx重新加载配置文件

1
nginx -s reload

热部署

nginx正在运行的时候,此时需要升级nginx版本。只需要更新nginx二进制文件。
先备份旧的nginx:

1
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

使用最新的nginx二进制文件 替换掉正在使用的nginx二进制文件。

1
cp -r nginx /usr/local/nginx/sbin/ -f

查看正在运行的nginx的master进程

1
ps -ef | grep nginx

告诉正在运行nginx的master,需要进行nginx升级

1
kill -USR2 [正在运行的nginx master进程ID]

执行完命令后会启动新的nginx进程,然后告知旧的nginx master进程,请优雅的关闭所有旧的worker进程

1
kill -WINCH [旧的nginx master进程ID]

然后会发现旧的nginx worker进程已经全部关闭,发现master进程还在。如果新的nginx版本发生的错误,可以回退到旧的nginx master进程中,执行nginx -s reload会回退到旧版本

日志切割

1
2
3
4
5
# 先把日志文件先备份
mv access.log access_bak.log

# 进行日志切割,执行完命令会重新生成access.log 文件
nginx -s reopen

一般情况下会后台做一个bash脚本,定时进行日志切割。

静态资源服务器

nginx 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 日志格式,main为日志格式命名
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

gzip on; # 对文件进行压缩传送
gzip_min_length 1; # 小于 1 字节则不进行压缩。
gzip_comp_level 2; # 压缩级别
gzip_types image/jpeg image/gif; # 对这些文件才进行压缩

server {
listen 80; # 监听端口
server_name localhost; # 域名

# 记录access_log日志(每一个请求都会记录), 使用main的log_format进行记录
access_log /logs/blog.log main;

# url匹配的路径
location / {
alias code/; # 指 nginx的安装目录下 eg:/usr/local/nginx/code
# autoindex on; # 共享静态资源
# set $limit_rate 10k; # nginx每秒传输 10k字节 到浏览器当中
}
}

具备缓存功能的反向代理服务

可以建立多个上游服务,当有请求进来的时候,nginx可以根据负载均衡算法代理给多台上游服务器工作。nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 上游服务
# local 为上游服务器名
upstream local {
# 其中一台上游服务器,可以配置多台
# 127.0.0.1:8080 代表只有本机能访问8080端口
server 127.0.0.1:8080;
}

# 反向代理缓存 缓存路径 内存关键字,10m
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g;
inactive=60m use_temp_path=off;

server {
listen 80;
server_name colablog.cn; # 域名

# 记录access_log日志(每一个请求都会记录), 使用main的log_format进行记录
access_log /logs/blog.log main;

# url匹配的路径
location / {
# doc http://nginx.org/en/docs/http/ngx_http_proxy_module.html
# proxy_set_header 反向代理服务器把客户端请求的信息,设置到请求头中发送到上游服务
proxy_set_header Host $host; # 域名
proxy_set_header X-Real-IP $remote_addr; # 客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 使用哪个缓存,对应上面的keys_zone
proxy_cache my_cache;
# 缓存的路径
proxy_cache_key $hots$uri$is_args$args;
# 对于这些响应不缓存
proxy_cache_valid 200 304 302 1d;

# 代理到上游服务
proxy_pass http://local;
}
}

GoAccess可视化实时监控access日志

安装

你可以快速使用 apt install或者 yum install,也可以在官网中查看编译安装的方式。
运行goaccess命令

1
# goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --real-time-html --time=format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED

–real-time-html 代表实时更新页面

nginx.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

server {
listen 80;
server_name: localhost;
# 日志记录
access_log logs/access.log main;

# 指定页面
location /report.html {
alias /usr/local/nginx/html/report.html;
}
}

然后访问 http://localhost/report.html,就可以看到下面这么高大上的界面了。
nginxaccesslog.jpg

SSL

如果你有域名的话,只需要两行命令可以快速把你的 http://域名 变成 https://域名。
ubuntu版本下

1
apt install python-certbot-nginx

centos版本下

1
yum install python2-certbot-nginx

使用certbot命令帮我们下载证书和自动配置好nginx.conf,

1
certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d [你的域名]

执行了上面的命令后会有两个选项,第一个选项是可以访问http或者https,不会进行重定向;而第二个选项则是访问http的时候重定向到https中。
就这样就搞定了,是不是很简单。

总结

Nginx初次入门的小白,文章若有错误的地方,请用力的指出。

参考文章:极客时间:Nginx核心知识100讲

个人博客网址: https://colablog.cn/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您
微信公众号

作者

Johnson木木

发布于

2020-06-17

更新于

2020-09-10

许可协议