linux下安装nginx
1. 上传安装包
比如放到/home/software下。
2.进入到/home/software下,进行解压
tar -zxvf nginx-1.24.0.tar.gz
3. 进入解压后的目录:
cd nginx-1.24.0
4. 配置编译参数
./configure --prefix=/usr/local/nginx --with-stream --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre
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
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 页面。