完成nginx编译安装脚本
Nginx的编译安装脚本通常包括一下几个步骤,包括安装编译环境、下载Nginx源码、解压、配置、编译和安装等。
#!/bin/bash
# 设置工作目录
SRC_DIR="/usr/local/src"
mkdir -p $SRC_DIR
cd $SRC_DIR
# 安装编译环境和依赖包
echo "正在安装编译环境和依赖包..."
yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel
# 下载Nginx源码包
NGINX_VERSION="nginx-1.22.0"
NGINX_URL="http://nginx.org/download/"
NGINX_FILE="${NGINX_VERSION}.tar.gz"
if [ ! -f "${NGINX_FILE}" ]; then
echo "正在下载Nginx源码包..."
wget ${NGINX_URL}${NGINX_FILE}
if [ $? -ne 0 ]; then
echo "下载Nginx源码包失败,请检查网络连接或Nginx官网地址。"
exit 1
fi
else
echo "Nginx源码包已存在,无需重新下载。"
fi
# 解压Nginx源码包
tar -zxf ${NGINX_FILE}
NGINX_DIR=$(echo ${NGINX_FILE} | sed -r 's/\.tar\.gz$//')
cd $NGINX_DIR
# 配置Nginx安装选项
echo "正在配置Nginx安装选项..."
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
# 编译并安装Nginx
echo "正在编译并安装Nginx..."
make
if [ $? -ne 0 ]; then
echo "Nginx编译失败,请检查错误日志。"
exit 1
fi
make install
# 创建Nginx用户(如果尚未创建)
if ! id nginx &>/dev/null; then
useradd -s /sbin/nologin -r nginx
echo "已成功创建nginx用户。"
else
echo "nginx用户已存在。"
fi
# 启动Nginx
/usr/local/nginx/sbin/nginx
echo "Nginx启动成功!"
完成nginx平滑升级,总结步骤
1. 确认当前Nginx版本和配置
首先,确认当前运行的Nginx版本和配置。
/usr/local/nginx/sbin/nginx -v
cat /usr/local/nginx/conf/nginx.conf
2. 准备新版本的Nginx源码
下载并解压新版本的Nginx源码。
wget http://nginx.org/download/nginx-1.22.0.tar.gz
tar zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
3. 安装编译依赖
安装编译Nginx所需的依赖库。
sudo apt-get update
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
4. 配置新版本Nginx
使用与当前运行版本相同的配置选项来配置新版本Nginx。
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre
5. 编译新版本Nginx
编译Nginx源码,但不要执行make install
。
make
6. 备份旧版本Nginx二进制文件
备份旧版本的Nginx二进制文件。
sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
7. 更新Nginx二进制文件
将新编译的Nginx二进制文件复制到安装目录。
sudo cp objs/nginx /usr/local/nginx/sbin/nginx
8. 发送信号启动新版本Nginx
向Nginx主进程发送USR2
信号,启动新版本的Nginx。
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
此时,会创建一个新的Nginx主进程和新的工作进程,而旧版本Nginx将继续处理现有连接。
9. 优雅关闭旧版本工作进程
向旧版本的主进程发送WINCH
信号,使其优雅地关闭工作进程。
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
10. 检查新版本Nginx是否运行正常
检查新版本Nginx是否能够正常处理请求。
curl -I http://localhost
11. 完全停止旧版本Nginx
确认新版本运行正常后,向旧版本主进程发送QUIT
信号,完全停止旧版本Nginx。
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
12. 清理旧版本文件
确认新版本运行稳定后,删除备份的旧版本文件。
rm /usr/local/nginx/sbin/nginx.old
总结nginx核心配置,并实现nginx多虚拟主机
Nginx核心配置总结
Nginx的配置文件主要位于/etc/nginx/nginx.conf
(在大多数Linux发行版中),但也可以包括其他文件,这些文件通过include
指令被引入。Nginx配置由几个部分组成,但主要可以归结为以下几个核心部分:
- 全局块:主要设置影响nginx服务器整体运行的配置指令,如
user
(运行nginx进程的用户)、worker_processes
(工作进程数量)、error_log
(错误日志路径)等。 - events块:主要影响nginx服务器与用户的网络连接,如
worker_connections
(单个工作进程的最大并发连接数)。 - http块:可以包含多个
server
块,用于定义虚拟主机。http
块还可以包含一些影响所有server
块的指令,如mime.types
文件的引用、log_format
(日志格式定义)、access_log
(访问日志)等。 - server块:用于定义虚拟主机的相关配置,如监听端口、域名、SSL配置、location块等。
- location块:用于匹配请求的URI,并对匹配的请求进行处理,如转发请求给后端应用服务器、返回特定文件等。
实现Nginx多虚拟主机
在Nginx中,可以通过定义多个server
块来实现多虚拟主机。以下是一个配置示例,它配置了两个虚拟主机:
http {
include mime.types;
default_type application/octet-stream;
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 /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# 第一个虚拟主机
server {
listen 80;
server_name www.example1.com;
location / {
root /usr/local/nginx/html/example1;
index index.html index.htm;
}
}
# 第二个虚拟主机
server {
listen 80;
server_name www.example2.com;
location / {
root /usr/local/nginx/html/example2;
index index.html index.htm;
}
}
}
在这个配置中:
- 第一个虚拟主机监听80端口,服务名为
www.example1.com
,其根目录设置为/usr/local/nginx/html/example
1。 - 第二个虚拟主机同样监听80端口,服务名为
www.example2.com
,其根目录设置为/usr/local/nginx/html/example2
。
确保为每个虚拟主机创建相应的根目录,并放置正确的网页文件。
要使配置生效,你需要重新加载Nginx配置:
sudo nginx -s reload
通过在/etc/hosts
文件中添加以下内容,你可以在本地测试这些虚拟主机:
10.0.0.152 www.example1.com
10.0.0.154 www.example2.com
现在,当你访问http://www.example.com
和http://www.anotherexample.com
时,Nginx会根据server_name
将请求分发到对应的虚拟主机。
总结nginx日志格式定制
默认日志格式
Nginx提供了几种默认的日志格式,其中最常见的是main
和combined
。main
格式记录了基本的请求信息,包括客户端IP、请求时间、请求方法、请求URI、状态码、发送的字节数、引用页面和用户代理等。而combined
格式则在main
的基础上增加了$http_referer
字段,用于记录引用页面的URL。
自定义日志格式
除了使用默认的日志格式外,Nginx还允许用户通过log_format
指令自定义日志格式。自定义日志格式可以包含Nginx预定义的变量,也可以包含自定义的变量(通过map
指令等方式定义)。
自定义日志格式的语法如下:
log_format name [escape=default|json|none] string ...;
name
:自定义日志格式的名称,在access_log
指令中引用。escape
:可选参数,用于指定日志中的特殊字符如何处理。default
表示使用Nginx的默认转义规则,json
表示使用JSON转义规则,none
表示不进行转义。string ...
:格式化字符串,可以包含Nginx预定义的变量和自定义的变量。
日志格式中的常用变量
$remote_addr
:客户端的IP地址。$time_local
:请求的本地时间。$request
:完整的HTTP请求行,包括请求方法、URI和协议。$status
:服务器响应的HTTP状态码。$body_bytes_sent
:发送给客户端的字节数(不包括响应头的大小)。$http_referer
:客户端发送的HTTP Referer头部信息。$http_user_agent
:客户端发送的User-Agent头部信息。$http_x_forwarded_for
:经过代理或负载均衡器时,客户端的真实IP地址(如果设置了该头部)。
总结 nginx反向代理及https安全加密
Nginx反向代理及HTTPS安全加密是现代Web服务中重要的技术和安全手段。下面分别对Nginx反向代理和HTTPS安全加密进行总结:
一、Nginx反向代理
1. 定义与功能
-
定义:Nginx反向代理是一种代理服务器的配置模式,它代表服务器向客户端提供服务。客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。
-
功能
:
- 负载均衡:Nginx可以通过反向代理实现负载均衡,将请求分发到多个后端服务器上,提高系统的并发处理能力和可用性。常见的负载均衡算法有轮询、IP哈希、最少连接等。
- 缓存加速:Nginx可以缓存静态资源或动态页面,减少后端服务器的负载,提高响应速度。
- SSL终端:Nginx可以作为SSL终端,接收HTTPS请求并进行SSL/TLS解密,然后将解密后的请求转发给后端服务器,提高安全性和性能。
- 安全过滤:Nginx可以通过反向代理实现安全过滤功能,如防止恶意请求、DDoS攻击、SQL注入等。
2. 配置过程
Nginx的反向代理功能通过配置文件进行配置,配置文件通常包含全局配置、HTTP配置和Server配置等部分。配置过程大致包括:
- 修改Nginx配置文件,设置监听端口、代理规则、缓存配置、负载均衡策略等。
- 保存配置文件并重启Nginx服务,使配置生效。
3. 优点
- 保护目标服务器:Nginx反向代理可以隐藏目标服务器的真实IP地址和端口,防止恶意用户直接攻击目标服务器。
- 节省IP资源:通过Nginx反向代理,可以将多个后端服务器隐藏在同一个公网IP地址后面,节省IP地址资源。
- 提高访问速度:Nginx反向代理可以缓存静态资源,减少后端服务器的负载并提高响应速度。
二、HTTPS安全加密
1. 定义与原理
- 定义:HTTPS(Hypertext Transfer Protocol Secure)是在HTTP基础上加入SSL/TLS加密层的安全超文本传输协议。
- 原理:HTTPS协议使用SSL/TLS协议对数据进行加密传输,确保数据在传输过程中的机密性和完整性。同时,HTTPS还可以验证服务器的身份,防止中间人攻击。
2. 加密过程
HTTPS的加密过程大致如下:
- 客户端发起HTTPS连接请求。
- 服务器返回自己的数字证书给客户端,证书包含服务器的公钥、证书颁发机构的数字签名等信息。
- 客户端验证证书的有效性,包括检查证书是否由受信任的证书颁发机构签发、证书是否在有效期内以及证书中的域名是否与访问的域名匹配等。
- 如果证书验证通过,客户端生成一个随机的对称密钥(会话密钥)用于加密通信,并使用服务器的公钥对会话密钥进行加密后发送给服务器。
- 服务器使用自己的私钥解密会话密钥,之后双方使用会话密钥进行加密通信。
3. 优点
- 数据加密:保护数据在传输过程中不被窃取或篡改。
- 身份验证:验证服务器的身份,确保用户连接的是正确的服务器。
- 提高信任与安全:使用数字证书建立信任关系,减少恶意攻击的可能性。
- 符合标准:现代网络安全标准和实践推荐使用HTTPS来保护Web应用程序。
4. 注意事项
- 定期更新SSL/TLS证书,保持证书的有效性。
- 使用强加密算法和密钥长度,提高数据传输的安全性。
- 配置正确的SSL/TLS协议版本和密码套件,避免已知的安全漏洞。
综上所述,Nginx反向代理和HTTPS安全加密是现代Web服务中不可或缺的技术手段,它们共同为Web应用提供了高性能、高可用性和高安全性的保障。