# 编译安装nginx

> wandoubaba / 2023-07-21

## 系统环境

以Debian11为例

## 下载源码

以1.24.0版本为例，下载nginx：

```sh
wget https://nginx.org/download/nginx-1.24.0.tar.gz
```

如果提示`wget: command not found`就先安装wget，执行`sudo apt-get install wget`就行。

解压：

```sh
tar zxvf nginx-1.24.0.tar.gz
```

## 安装依赖

```sh
sudo apt-get install libgd-dev build-essential zlib1g-dev libpcre3-dev libssl-dev lsb-release
```

## 创建www用户和组

查看www用户是否存在

```sh
id www
```

创建www分组和www用户，并且不允许登录系统

```sh
groupadd www
useradd -g www -s /sbin/nologin www
```

再查看www用户

```sh
id www
```

## 编译安装

```sh
cd nginx-1.24.0
```

带参数执行编译

```sh
./configure --user=www --group=www \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_image_filter_module \
    --with-http_addition_module \
    --with-http_stub_status_module \
    --with-stream \
    --with-stream_ssl_module \
    --with-stream_ssl_preread_module \
    --with-http_gzip_static_module \
    --with-http_gunzip_module \
    --with-http_sub_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_dav_module \
    --with-openssl-opt=-g \
    --with-pcre-opt=-g \
    --with-pcre
```

安装：

```sh
make
sudo make install
```

经过以上步骤，nginx已经被安装到`/usr/local/nginx`目录下，程序文件位于`/usr/local/nginx/sbin/nginx`。

## 启动服务

可以先把nginx程序路径写到系统环境中（可以把这条命令加到`~/.bashrc`文件中）

```sh
export PATH=/usr/local/nginx/sbin/:$PATH
```

执行直接执行`nginx`即可启动服务。

在浏览器访问`http://ip`（把IP换成你的nginx主机地址），如果防火墙和安全组都放行了80端口，我们现在应该能看到`Welcome to nginx`页面了。

用下面的命令可以控制服务的启停：

```sh
## 重启服务
nginx -s reopen
## 停止服务
nginx -s stop
nginx -s quit
## 重载配置
nginx -s reload
```

## 注册系统服务

注意：操作系统不同，下面的方法可能不一样。

创建`/etc/systemd/system/nginx.service`文件：

```ini
[Unit]
Description=Nginx Service
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
```

执行下面的命令使服务生效并实现随系统启动：

```sh
sudo systemctl daemon-reload
sudo systemctl enable nginx
```

用下面的命令控制服务：

```sh
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl stop nginx
sudo systemctl reload nginx
sudo systemctl status nginx
```
