阅读 437

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讲

个人博客网址: colablog.cn/

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

微信公众号

文章分类
阅读
文章标签