跳到主要内容

Linux 修行之路 · Blog

Linux修行之路 - 技术博客

分享Kubernetes、Linux、Python、网络安全等技术文章

文章数量169
技术分类9
查看分类
12

# 针对端口跳转

· 阅读需 1 分钟

针对端口跳转

80 强制跳转 443

server {
listen 443 ssl;
server_name www.xxx.com;

root /usr/share/nginx/Multi-CDN/multicdn;
index index.html index.htm;

ssl_certificate /etc/nginx/sites-cret/$host.pem;
ssl_certificate_key /etc/nginx/sites-cret/$host.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}

server {
listen 80;
server_name www.xxx.com;

rewrite ^(.*)$ https://${server_name}$1 permanent;
}

不同 Url 进行跳转

xxx.com 强制跳转 www.xxx.com

server {
listen 80;
server_name xxx.com;

location = / {
rewrite ^(.+)$ $scheme://www.xxx.com$1 redirect;
}

# root /usr/share/nginx/Multi-CDN/multicdn;
# index index.html index.htm;

}

server {
listen 443;
server_name xxx.com;

# root /usr/share/nginx/Multi-CDN/multicdn;
# index index.html index.htm;
#
# ssl_certificate /etc/nginx/sites-cret/huosanyun.pem;
# ssl_certificate_key /etc/nginx/sites-cret/huosanyun.key;
#
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
#
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

location = / {
rewrite ^(.+)$ $scheme://www.xxx.com$1 redirect;
}
}

Nginx日志轮转配置指南

· 阅读需 3 分钟

Nginx日志轮转配置指南

注:本文档基于nginx日志目录为 /etc/nginx/logs/ 的环境配置。 如果您的nginx日志在其他目录(如默认的/var/log/nginx/),请相应调整路径。

1. 检查系统环境

首先确认系统已安装logrotate:

# 检查是否安装logrotate
which logrotate

# 如果未安装,使用以下命令安装
# CentOS/RHEL系统
sudo yum install logrotate

# Ubuntu/Debian系统
sudo apt-get install logrotate

2. 创建Nginx日志轮转配置

创建nginx专用的logrotate配置文件:

sudo vim /etc/logrotate.d/nginx

配置文件内容:

/etc/nginx/logs/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

3. 配置参数说明

  • daily: 每天轮转一次
  • missingok: 如果日志文件丢失,不报错
  • rotate 52: 保留52个轮转文件(约1年)
  • compress: 压缩旧的日志文件
  • delaycompress: 延迟压缩,保留最近的一个文件不压缩
  • notifempty: 如果日志文件为空,不进行轮转
  • create 0640 nginx nginx: 创建新日志文件的权限和所有者
  • sharedscripts: 所有日志文件轮转后只执行一次脚本
  • postrotate: 轮转后执行的脚本,发送USR1信号给nginx重新打开日志文件

4. 测试配置

# 测试配置文件语法
sudo logrotate -d /etc/logrotate.d/nginx

# 强制执行轮转(用于测试)
sudo logrotate -f /etc/logrotate.d/nginx

5. 验证轮转效果

# 查看日志文件
ls -la /etc/nginx/logs/

# 查看轮转后的文件
ls -la /etc/nginx/logs/*.gz

6. 高级配置示例

按大小轮转

/etc/nginx/logs/*.log {
size 100M
missingok
rotate 10
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

按小时轮转

/etc/nginx/logs/*.log {
hourly
missingok
rotate 168
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

7. 排查问题

检查logrotate服务状态

# 检查logrotate服务状态
sudo systemctl status logrotate

# 查看logrotate日志
sudo journalctl -u logrotate

检查权限问题

# 确保nginx用户有正确的权限
sudo chown -R nginx:nginx /etc/nginx/logs/
sudo chmod 755 /etc/nginx/logs/

手动测试

# 手动执行logrotate
sudo /usr/sbin/logrotate -v /etc/logrotate.d/nginx

8. 监控脚本

创建一个监控脚本来检查日志轮转状态:

#!/bin/bash
# /usr/local/bin/check_log_rotation.sh

LOG_DIR="/etc/nginx/logs"
MAX_SIZE=100M
ALERT_EMAIL="admin@example.com"

# 检查日志文件大小
for log_file in $LOG_DIR/*.log; do
if [ -f "$log_file" ]; then
size=$(du -h "$log_file" | cut -f1)
if [[ $size > $MAX_SIZE ]]; then
echo "Warning: $log_file size is $size" | mail -s "Log Size Alert" $ALERT_EMAIL
fi
fi
done

# 检查是否有过期的日志文件
find $LOG_DIR -name "*.gz" -mtime +30 -exec rm {} \;

9. 性能优化建议

  1. 合理设置轮转频率:根据日志量调整轮转频率
  2. 使用压缩:节省磁盘空间
  3. 定期清理:删除过期的日志文件
  4. 监控磁盘空间:避免日志文件占满磁盘

10. 注意事项

  • 确保nginx用户有足够权限访问日志目录
  • 在生产环境测试前,先在测试环境验证配置
  • 定期检查轮转是否正常工作
  • 考虑使用日志管理工具如ELK Stack进行集中管理

OpenSSL自签证书

· 阅读需 2 分钟

OpenSSL自签证书

第一步:创建私钥

openssl genrsa -out server.key 2048

第二步:创建证书配置文件 创建一个名为 cert.conf 的配置文件:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = Example Company
OU = IT Department
CN = localhost

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = *.localhost
IP.1 = 127.0.0.1
IP.2 = ::1

第三步:生成证书签名请求(CSR)

openssl req -new -key server.key -out server.csr -config cert.conf

第四步:生成自签证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -extensions v3_req -extfile cert.conf

第五步:验证证书

# 查看证书详情
openssl x509 -in server.crt -text -noout

# 验证证书和私钥是否匹配
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5

第六步:配置使用

将生成的 server.crtserver.key 文件放置到适当的目录,并在应用程序中配置使用:

# 创建证书目录
sudo mkdir -p /etc/ssl/certs
sudo mkdir -p /etc/ssl/private

# 复制证书文件
sudo cp server.crt /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/

# 设置权限
sudo chmod 644 /etc/ssl/certs/server.crt
sudo chmod 600 /etc/ssl/private/server.key

在 Nginx 中使用:

server {
listen 443 ssl;
server_name localhost;

ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;

# 其他配置...
}

在 Apache 中使用:

<VirtualHost *:443>
ServerName localhost
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
# 其他配置...
</VirtualHost>

注意事项:

  1. 自签证书只适用于测试环境或内部网络
  2. 浏览器会显示证书不受信任的警告
  3. 生产环境建议使用权威CA签发的证书
  4. 可以将根证书导入到客户端系统的受信任证书存储中以消除警告