面向 NGINX 的基本教程。
以下操作均在 Ubuntu 18.04 bionic 下验证通过。
获取 OpenSSL、PCRE 和 zlib 的包后,提取 nginx 的包。
$ tar -xzvf nginx-1.16.1.tar.gz
$ cd nginx-1.16.1
$ ./configure --with-http_ssl_module --with-http_stub_status_module \
--with-openssl=../openssl-1.1.1d --with-pcre=../pcre-8.44 --with-zlib=../zlib-1.2.11
$ make
$ sudo make install
创建 /etc/systemd/system/nginx.service 文件并添加以下内容:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
执行以下命令:
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
创建 /usr/local/nginx/conf/nginx.lr 文件并添加以下内容:
# 实际上 logrotate 并没有注释这种说法,正式使用时记得将#及后面的内容删掉
/var/www/access.log /var/www/error.log {
daily # 每天转储一次
dateext # 使用 YYYYMMDD 作为命名格式
missingok # 日志文件丢了也没关系
nocompress # 不压缩日志文件
notifempty # 不转储空文件
rotate 7 # 最多保留7个归档日志,access.log 的归档日志就是 access.log-YYYYMMDD 文件
postrotate
pidfile=/usr/local/nginx/logs/nginx.pid
if [ -f $pidfile ]; then
kill -USR1 $(cat $pidfile)
fi
endscript
}
执行以下命令。
# 切分日志
$ logrotate -vf /usr/local/nginx/conf/nginx.lr
# 查看 logrotate 本身的日志
$ cat /var/lib/logrotate/status
每天0点切分一次日志的 cron 表达式如下所示:
0 0 * * * /usr/sbin/logrotate -f /usr/local/nginx/conf/nginx.lr
适用于不同的应用场景的 nginx.conf 如下所示。
worker_processes 2;
events {
use epoll;
worker_connections 1024;
}
http {
upstream httpds {
server 127.0.0.1:8080;
server 127.0.0.1:8088;
}
server {
listen 80;
location / {
proxy_pass http://httpds;
}
}
}
user www-data;
worker_processes auto;
error_log /var/www/error.log info;
events {
use epoll;
worker_connections 1024;
}
http {
gzip on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
include mime.types;
default_type application/octet-stream;
log_format main '[$time_local] ip: $remote_addr req: "$request" '
'status: $status size: $body_bytes_sent '
'from: "$http_referer" ua: "$http_user_agent"';
access_log /var/www/access.log main;
server {
listen 80;
# 影响 Content-Type
charset utf-8;
location / {
root /var/www/imgs;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location ~ .*\.(bmp|gif|ico|jpeg|jpg|png)$ {
root /var/www/imgs;
expires 24h;
}
}
}