在服务器国产化的浪潮下,我们公司的业务系统服务器改成了龙蜥7.9(AnolisOS 7.9)。为了实现业务迁移,需要重新安装一下nginx,而且是内网服务器,只能使用安装包安装了。
目录
4.1. --prefix=/usr/local/nginx
4.2. --with-http_stub_status_module
4.4. --user=nginx 和 --group=nginx
9.1. 启动时,提示“nginx: [emerg] getpwnam("nginx") failed”
9.2.1. 编辑 Nginx 配置文件: 打开 Nginx 的配置文件(通常是 /usr/local/nginx/conf/nginx.conf),在 server 部分添加以下配置:
9.2.2. 重启 Nginx: 执行以下命令重启 Nginx:
9.2.3. 访问状态页面: 在浏览器中访问 http://your_server_ip/nginx_status,你将看到类似以下的状态信息:
9.2.4. 控制访问权限(可选): 如果你想限制访问状态页面的 IP 地址,可以在配置中调整 allow 和 deny 部分。
安装流程
在此附上我使用的安装包
通过网盘分享的文件:nginx-1.24.0.tar.gz
链接: https://pan.baidu.com/s/13S05ThEVm6O6qEhAe0dJIQ?pwd=9xbf 提取码: 9xbf
1. 上传安装包
比如放到/home/software下。
2. 解压源代码包
进入你下载的目录,执行以下命令解压 Nginx 源代码包:
tar -zxf nginx-1.24.0.tar.gz
3. 进入解压后的目录:
cd nginx-1.24.0
4. 配置编译参数
./configure --prefix=/usr/local/nginx
可以根据需求添加不同的参数:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --user=nginx --group=nginx
4.1. --prefix=/usr/local/nginx
- 这个参数指定了 Nginx 的安装目录。在这里,Nginx 将被安装到
/usr/local/nginx
目录下。
4.2. --with-http_stub_status_module
- 这个参数启用了 Nginx 的
stub_status
模块。该模块提供了一个简单的状态页面,显示当前 Nginx 工作进程的活动状态、连接数等信息。如果你不需要这个模块,可以不加这个参数。
4.3. --with-http_ssl_module
- 这个参数启用了 Nginx 的 SSL/TLS 支持。如果你的网站需要使用 HTTPS,那么必须加上这个参数。否则,可以不加。
4.4. --user=nginx
和 --group=nginx
- 这两个参数分别指定了 Nginx 运行时的用户和组。如果你不指定,Nginx 将使用默认的用户和组(通常是
nobody
)。如果你不关心用户和组,可以不加这两个参数。
5. 编译并安装 Nginx
make && make install
6. 修改文件夹归属
(如果没有创建nginx用户的打算,可以跳过): 修改 Nginx 文件夹的归属,确保它属于 nginx
用户和组:
chown -R nginx:nginx /usr/local/nginx
7. 启动 Nginx
/usr/local/nginx/sbin/nginx
如果执行命令后没有任何输出,通常表示命令成功执行。在这种情况下,Nginx 已经在后台启动了。
你可以通过以下方式来验证 Nginx 是否正在运行:
7.1. 检查进程
执行以下命令,查看是否有 Nginx 进程在运行:
ps aux | grep nginx
如果看到类似于以下的输出,说明 Nginx 正在运行:
root 1234 0.0 0.1 12345 6789 ? Ss 09:00 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 5678 0.0 0.2 23456 9876 ? S 09:01 0:00 nginx: worker process
7.2. 访问 Nginx 默认页面
打开浏览器并访问你的服务器 IP 地址或域名,应该能够看到 Nginx 的启动页面。如果能够访问,说明 Nginx 正在运行。
8. 设置开机启动
8.1. 创建服务文件
echo -e "[Unit]\nDescription=nginx\nAfter=network.target\n\n[Service]\nType=forking\nExecStart=/usr/local/nginx/sbin/nginx\nExecReload=/usr/local/nginx/sbin/nginx reload\nExecStop=/usr/local/nginx/sbin/nginx quit\nPrivateTmp=true\n\n[Install]\nWantedBy=multi-user.target" > /lib/systemd/system/nginx.service
创建一个 systemd 服务文件,该文件定义了 Nginx 服务的启动、重启和停止行为,以及其他相关配置。让我解释一下这段内容:
[Unit]
部分:
-
Description=nginx
:描述了该服务的名称,这里是 “nginx”。After=network.target
:指定了服务在网络已启动后才启动。
[Service]
部分:
-
Type=forking
:指定了服务的启动类型为 fork 模式,即在后台运行。ExecStart=/usr/local/nginx/sbin/nginx
:定义了启动 Nginx 服务的命令。ExecReload=/usr/local/nginx/sbin/nginx reload
:定义了重新加载配置的命令。ExecStop=/usr/local/nginx/sbin/nginx quit
:定义了停止 Nginx 服务的命令。PrivateTmp=true
:启用了私有临时目录。
[Install]
部分:
-
WantedBy=multi-user.target
:指定了服务在多用户模式下启动。
这个文件将被保存到 /lib/systemd/system/nginx.service
,并且在系统启动时会自动加载。
8.2. 启用服务
systemctl enable nginx.service
8.3. 停止当前的nginx服务
避免因为端口占用无法启动
/usr/local/nginx/sbin/nginx -s stop
8.4. 重启 Nginx 服务
systemctl restart nginx
8.5. 查看 Nginx 服务状态
systemctl status nginx
8.6. 查看是否开机自启
systemctl is-enabled nginx
此命令将返回以下之一:
enabled
:服务已启用,将在启动时自动启动。disabled
:服务已禁用,不会在启动时启动。static
:服务已启用,但不会自行启动。
9. 疑难解答
9.1. 启动时,提示“nginx: [emerg] getpwnam("nginx") failed”
这个错误是因为在编译配置中配置了用户与组为nginx,但是 Nginx 无法找到名为 “nginx” 的用户。
解决方案一:
可以尝试创建一个nginx的用户
useradd nginx
然后,重新启动 Nginx:
/usr/local/nginx/sbin/nginx
解决方案二:
修改 Nginx 运行用户: 编辑 Nginx 配置文件(通常是 /usr/local/nginx/conf/nginx.conf
),找到 user
配置项,将其设置为你当前登录用户或其他已有用户。
此处可能会发现Nginx 配置文件中的 #user nobody;
行被注释掉了。这意味着 Nginx 将使用默认的用户和组来运行。可以考虑直接将此行注释放开,Nginx 将使用默认的 nobody
用户来运行。这意味着所有用户都可以访问 Nginx 服务。
然而,请注意以下几点:
- 默认情况下,
nobody
用户通常没有权限访问其他用户的文件或目录。如果你的网站需要读取或写入某些文件,你需要确保这些文件的权限允许nobody
用户进行操作。 - 以
nobody
用户运行 Nginx 可能存在一些安全风险,因为它是一个通用的、低权限的用户。如果你关心安全性,你可以考虑创建一个专门的用户来运行 Nginx,然后在配置文件中指定该用户。
9.2. stub_status 模块的使用
9.2.1. 编辑 Nginx 配置文件: 打开 Nginx 的配置文件(通常是 /usr/local/nginx/conf/nginx.conf
),在 server
部分添加以下配置:
location /nginx_status {
stub_status;
allow 127.0.0.1; # 允许访问的 IP 地址,可以根据需要修改
deny all; # 禁止其他 IP 访问
}
9.2.2. 重启 Nginx: 执行以下命令重启 Nginx:
/usr/local/nginx/sbin/nginx -s reload
9.2.3. 访问状态页面: 在浏览器中访问 http://your_server_ip/nginx_status
,你将看到类似以下的状态信息:
-
Active connections
:当前活跃的连接数。server accepts handled requests
:总连接数、成功处理的连接数、总请求数。Reading
、Writing
、Waiting
:Nginx 工作进程的状态。
9.2.4. 控制访问权限(可选): 如果你想限制访问状态页面的 IP 地址,可以在配置中调整 allow
和 deny
部分。
9.2.4.1. allow
配置
allow
指定了允许访问 stub_status
页面的 IP 地址。你可以指定一个或多个 IP 地址,用空格分隔。
如果你只想允许特定的 IP 地址访问状态页面,可以这样配置:
location /nginx_status {
stub_status;
allow 192.168.1.10; # 允许访问的 IP 地址
deny all; # 禁止其他 IP 访问
}
-
- 如果你想允许多个 IP 地址访问,可以这样配置:
location /nginx_status {
stub_status;
allow 192.168.1.10 192.168.1.20; # 允许访问的多个 IP 地址
deny all; # 禁止其他 IP 访问
}
9.2.4.2. deny
配置
deny
指定了禁止访问 stub_status
页面的 IP 地址。如果某个 IP 地址在 allow
和 deny
中都有配置,deny
优先级更高。
如果你不想限制 IP 地址,可以只配置 allow all;
或者省略 allow
和 deny
部分:
location /nginx_status {
stub_status;
allow all; # 允许所有 IP 访问
}
9.2.4.3. 默认值
如果你不配置 allow
和 deny
,默认情况下,所有 IP 地址都可以访问 stub_status
页面。