安装
下载
解压
进入目录,修改参数如下
拷贝文件添加语法识别
touch ~/.vim
cp -r contrib/vim/* ~/.vim
进入文件auto/cc/gcc关闭debug功能
# debug
#CFLAGS="$CFLAGS -g"
修改文件src/core/nginx.h关闭版本
#define NGINX_VER "nginx"
编译
--with-file-aio 传输文件参数
./configure --prefix=/usr/local/nginx --with-file-aio
安装
make && make install
注:如果为版本更新,make即可,make install会覆盖所有配置文件
进入安装后目录,修改配置文件参数
修改配置文件conf/nginx.conf
添加用户nginx
useradd nginx -s /sbin/nologin
设定worker进程拥有者为nginx,默认开启两个worker进程
user nginx nginx;
worker_processes 2;
启动服务
查看版本
nginx -v
查看版本和编译参数
nginx -V
nginx版本更新和回退
更新
拷贝旧的nginx启动文件做保留
编译,make新的版本
拷贝生成的objs目录下的启动文件nginx
cp -f nginx-1.17.1/objs/nginx /usr/local/nginx/sbin/nginx
拉起worker进程
kill -USR2 old master's pid
kill -WINCH old master's pid
!!!如果没有问题
kill -9 old master's pid
回退
拷贝旧的启动文件
回退旧进程的worker进程
kill -HUP old master's pid
拉起新产生的worker进程
kill -WINCH new master's pid
杀死更新进程
kill -9 new master's pid
备份切割日志
编写备份脚本
#! /bin/bash
LOGS_PATH=/usr/local/nginx/logs/oldlogs
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -2day)
mv $CUR_LOGS_PATH/access.log $LOGS_PATH/${YESTERDAY}_access.log
mv $CUR_LOGS_PATH/error.log $LOGS_PATH/${YESTERDAY}_error.log
#/usr/local/nginx/sbin/nginx -s reopen
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
定时任务执行
00 00 * * * /bin/sh /usr/local/nginx/logs/backup.sh
查看结果
系统方式启动
拷贝httpd的模板文件
cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/multi-user.target.wants/nginx.service
修改文件内容
[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载systemd服务
systemctl daemon-reload
执行结果
Nginx参数
压缩参数
gzip on;
# 20k以下不进行压缩
gzip_min_length 20;
# 压缩等级1-9
gzip_comp_level 3;
# 压缩种类
gzip_types text/html text/plain application/x-javascript;
重新加载服务
systemctl reload nginx
打开网页
限制参数
限制worker可连接数
worker_connections 1024;
限制请求连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
限制处理请求速率
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
指定目录
location /download/ {
使用限制请求的连接数
limit_conn addr 1;
限制连接速率
limit_rate 50k; / set $limit_rate 50k;
限制请求处理速率,指定队列为5
limit_req zone=one burst=5;
}
设置限制参数
使用限制参数
结果:由于限制速率,导致图片加载速度变慢,只加载了一半
日志
日制格式
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/nginx.log main;
重启,产生新的日志,访问,查看结果
real_ip参数(忽略代理记录真实客户机)
重新编译服务器nginx,添加模块http_realip_module
配置代理(172.25.42.2)
upstream 172.25.41.2 {
server 172.25.41.1;
}
server {
listen 80;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.25.41.2;
}
}
配置服务器realip参数(172.25.41.1)
server {
listen 80;
server_name www.octopus.com;
#charset koi8-r;
#access_log logs/host.access.log main;
set_real_ip_from 172.25.41.2;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location / {
root html;
index index.html index.htm;
}
}
启动代理,启动服务器,配置客户机(172.25.41.254)解析,访问
查看日志
https
重新编译nginx,添加ssl模块
生成自签名证书(如果有证书,忽略,这一步)
导入证书
编辑服务器配置文件
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /web;
index index.html;
}
}
新建目录,编写主页面
客户机配置访问
图片压缩参数
重新编译nginx
添加图片压缩模块
导入该模块,到nginx的模块目录下(没有就新建)
配置文件中导入该模块
load_module modules/ngx_http_image_filter_module.so;
使用该压缩参数,如果出现unsuported media的415错误类型,需要增加参数image_filter_buffer 2M;由于默认为1M,过大的图片压缩后,依然会溢出buffer
image_filter resize 150 100;
image_filter rotate 90;
image_filter_buffer 2M;
重启服务器,查看结果
重定向和反盗链(Rewrite模块)
(1)暂时重定向(浏览器不缓存)
在代理中配置重定向参数,将重定向到https://172.25.41.1
rewrite ^/(.*)$ https://172.25.41.1/$1;
重启代理,访问172.25.41.2
(2)永久重定向(浏览器缓存)
rewrite ^/(.*)$ https://172.25.41.1/$1 permanent;
重启代理,再次访问
(3)多重定向
修改配置文件
server {
listen 80;
server_name www.octopus.org;
if ( $host = "www.octopus.com"){
rewrite ^/(.*)$ https://www.octopus.com/$1 permanent;
}
rewrite ^/(.*)$ https://www.octopus.com/$1 permanent;
}
重启服务,查看配置结果
(4)反盗链
创建盗链网站(172.25.41.2)
查看结果
设置反盗链,重新启动nginx
location ~* \.(gif|jpg|png|jpeg)$ {
root /web;
valid_referers none bloked www.octopus.com;
if ($invalid_referer) {
# 也可以再此设置重定向,进入自己的网站
return 403;
}
}
再次进行访问
也可以配置重定向到某个链接
location ~* \.(gif|jpg|jpeg)$ {
root /web;
valid_referers none bloked www.octopus.com;
if ($invalid_referer) {
rewrite ^/ http://www.octopus.com/11111.png;
}
}
重定向到新的图片
openresty使用配置缓存(proxy_cache)
修改nginx服务器的配置文件,使得只监听本地127.0.0.1:8080,同时编写主文件如下
修改配置文件
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
修改主文件
启动nginx,本地测试
编译安装openresty
./configure --prefix=/usr/local/openresty
修改配置文件,添加代理以及缓存配置
代理主机的nginx服务器
upstream octopus {
server 127.0.0.1:8080;
}
设置缓存
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m inactive=7d max_size=100g;
server {
listen 80;
server_name www.octopus.org;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
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_cache my_cache;
proxy_cache_valid 200 404 10d;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://octopus;
}
启动代理,测试
查看缓存文件
此时关闭nginx服务器,仅打开代理,依然可以正常访问
Goaccess的使用
安装依赖
yum install GeoIP-devel-1.5.0-11.el7.x86_64 ncurses-devel.x86_64 -y
编译安装软件
./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=legacy --with-openssl
链接可执行文件至/bin下
ln -s /usr/local/goaccess/bin/goaccess /usr/bin/
执行分析命令,分析nginx服务器的日志,并以html页面展示
goaccess access.log -o ../html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED
配置文件中添加该生成的html(由于之前做了缓存,此时放在代理的配置文件中)
location /report.html {
alias /usr/local/nginx/html/report.html;
}
重启代理,访问