Ubuntu 编译安装Nginx

74 阅读3分钟

一、前言

Nginx是现代互联网应用的核心枢纽,以其高性能处理海量并发连接而至关重要。它作为反向代理和负载均衡器,是构建高可用、可扩展架构的基石,并能通过高效处理静态内容与缓存极大提升整体服务性能与稳定性。

二、环境与准备

1、环境准备 操作系统 Ubuntu 13.3.0-6ubuntu2~24.04

2、下载地址 :wget -o https://nginx.org/download/nginx-1.24.0.tar.gz

3、官网地址: https://nginx.org

4、Nginx编译配置文档地址: https://nginx.org/en/docs/configure.html

三、安装过程

3.1 编译与安装

在官网下载nginx.tar 包通过 tar命令解压

sudo apt update

## 创建用户和用户组
sudo adduser --system --no-create-home --shell /bin/false --group --disabled-login nginx

sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev

#配置 Nginx 编译选项,这里包含了一些常用模块

./configure \
    --prefix=/usr/local/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --pid-path=/var/run/nginx.pid \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-pcre \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_auth_request_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_stub_status_module \
    --with-http_slice_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-stream \
    --with-stream_ssl_module \
    --with-stream_realip_module \
    --with-stream_ssl_preread_module \
    --with-threads \
    --user=nginx \
    --group=nginx

---------------------------------------------------------

## 进行编译 和安装
sudo make && make install

3.2 创建账号

建 Nginx 运行所需的目录并设置正确的权限

# 创建日志目录
sudo chown -R nginx:nginx /var/run/nginx.pid
sudo chown -R nginx:nginx /usr/local/nginx/

sudo mkdir -p /var/log/nginx
sudo chown -R nginx:nginx /var/log/nginx


# 创建缓存目录
sudo mkdir -p /var/cache/nginx
sudo chown -R nginx:nginx /var/cache/nginx

# 创建网站根目录
sudo mkdir -p /data/nginx/www/html
sudo chown -R nginx:nginx /data/nginx/www/html

3.3 创建系统服务

创建 systemd 服务文件以便管理 Nginx

sudo nano /etc/systemd/system/nginx.service
------------------------------------------------------

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
User=nginx
Group=nginx

[Install]
WantedBy=multi-user.target

修改环境变量

## 后一行输入
echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> ~/.bashrc
echo 'export PATH="/usr/sbin:$PATH"' >> ~/.bashrc
## 刷新配置文件
source  ~/.bashrc

服务启动

sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

四、问题与解决

4.1 错误排查

## 查看系统日志中关于 Nginx 的详细错误信息
sudo journalctl -xe -u nginx.service

## 或者查看最近的日志
sudo journalctl -u nginx.service --since "2 minutes ago"

4.2 运行权限不足

Starting nginx.service - The NGINX HTTP and reverse proxy server...

Sep 08 08:00:03 nginx[1722]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

Sep 08 08:00:03 nginx[1722]: nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Sep 08 08:00:03 nginx[1722]: nginx: configuration file /etc/nginx/nginx.conf test failed

Sep 08 08:00:03  systemd[1]: **nginx.service: Control process exited, code=exited, status=1/FAILURE**

Sep 08 08:00:03 systemd[1]: **nginx.service: Failed with result 'exit-code'.**

Sep 08 08:00:03  systemd[1]: **Failed to start nginx.service - The NGINX HTTP and reverse proxy server.**

修改目录权限 sudo chown -R nginx:nginx /var/run/

4.3 Nginx端口启用安全限制

# 检查80端口是否被占用:
sudo netstat -tulpn | grep :80

# 如果没有被占用,那么我们需要给nginx可执行文件赋予绑定特权端口的权限:
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx

# 再次测试Nginx配置:
sudo nginx -t

# 如果测试通过,则启动Nginx:
sudo systemctl start nginx

参考资料

Nginx官网 nginx.org