Nginx入门学习

简介

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

download

下载地址:nginx.org/en/download…;

mainline:最新版本

stable:稳定版本

下载命令:

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重新加载配置文件

nginx -s reload

热部署

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

先备份旧的nginx:

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

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

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

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

ps -ef | grep nginx

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

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

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

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

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

日志切割

# 先把日志文件先备份

mv access.log access_bak.log

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

nginx -s reopen

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

静态资源服务器

nginx 配置

# 日志格式,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配置

# 上游服务

# 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命令

# 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配置文件

# 日志格式

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版本下

apt install python-certbot-nginx

centos版本下

yum install python2-certbot-nginx

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

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

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

就这样就搞定了,是不是很简单。

总结

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

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

以上是 Nginx入门学习 的全部内容, 来源链接: utcz.com/a/25371.html

回到顶部