教程 | Nginx快速上手

前情提要

没错,我每篇文章都有一个前情提要,但其实这一篇也没什么好写的。关于反向代理(或者说是网站服务)这个东西之前也属于是困扰了我很久。还记得一开始建站的时候就选择了宝塔面板直接搭建,然后各种翻车难顶,最后不得不把我的网站放到了第三方托管平台然后给他们更多的钱。当然你现在看到的网站内容还是沿用了第三方托管,毕竟人家也是真的稳。

本篇会主要讲一些关于Nginx的基础配置,希望这些内容可以很好地帮助未来的我和看这篇文章的你。

准备工作

你需要准备的东西有:

  1. 私有ip地址段(192.168.x.x或者10.0.x.x都行,你有钱也可以公网ip,没人问);
  2. 一台空闲的电脑,运行基于Ubuntu的Linux发行版(用别的也行,出问题自己看着办就是,没作业可抄)。

不完全必备的内容:

  1. 为机器分配多个IP地址。

通过ifconfig查询ip地址。假设你的ip地址以10.x.x.x开头(如果不是,请举一反三),我们就可以使用 sudo nano /etc/netplan/01-netcfg.yaml 来创建一个名为01-netcfg.yaml的配置文件。在这份配置文件中,写入如下内容(请根据具体情况更改/分配地址)。此处写了一条给以太网口eth0分配了三个ip地址,分别是10.0.0.35/36/37。

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 10.0.0.35/24
        - 10.0.0.36/24
        - 10.0.0.37/24
      gateway4: 10.0.0.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

在此之后,使用sudo netplan apply 来应用更改。这样一来,你的多个网络应用就不会抢着用端口(或者给这些应用分配不同的端口然后自己记不住)了。

正式开干

Nginx基础配置

首先,通过以下几个命令来安装并启动Nginx,最后检查是否正常运行。

  1. sudo apt update
  2. sudo apt install nginx
  3. sudo systemctl enable nginx
  4. sudo systemctl start nginx
  5. sudo systemctl status nginx

然后我们用下面两行命令让ufw放行所有来自Nginx的流量:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw enable

接下来,我们要知道所有的网站根目录都会被存储在/var/www/下,另外Nginx的配置文件被存放在/etc/nginx/sites-available//etc/nginx/sites-enabled中。前者是所有存在的网站,后者是启用的网站。

网络应用案例

接下来,让我们安装一些不同的网络应用(web applications),这样你就知道如果你有多个而非仅有一个站点的话要怎么操作了。我们这次就用WordPress, BookStack 和 FileBrowser 开刀。让我们先用以下命令新建目录,并给予用户相应权限。

  1. sudo mkdir -p /var/www/wordpress.local
  2. sudo mkdir -p /var/www/wiki.local
  3. sudo mkdir -p /var/www/filebrowser.local
  4. sudo chown -R $USER:$USER /var/www/

下一步,是编辑 /etc/nginx/sites-available/当中的配置文件。我们通过

  1. sudo nano /etc/nginx/sites-available/wordpress.local
  2. sudo nano /etc/nginx/sites-available/wiki.local
  3. sudo nano /etc/nginx/sites-available/filebrowser.local

分别为WordPress,Wiki和FileBrowser来创建配置文件。每一个配置文件的样例放在下面,可以点开标签查看。

 

server {
    listen 80;
    server_name wordpress.local;
    root /var/www/wordpress.local;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # Adjust PHP version if needed
    }

    location ~ /\.ht {
        deny all;
    }
}
server {
    listen 80;
    server_name wiki.local;
    root /var/www/wiki.local/public;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # Adjust PHP version if needed
    }

    location ~ /\.ht {
        deny all;
    }
}
server {
    listen 80;
    server_name filebrowser.local;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

接下来,我们把这些配置文件链接到启用的网站配置文件目录中:

  1. sudo ln -s /etc/nginx/sites-available/wordpress.local /etc/nginx/sites-enabled/
  2. sudo ln -s /etc/nginx/sites-available/wiki.local /etc/nginx/sites-enabled/
  3. sudo ln -s /etc/nginx/sites-available/filebrowser.local /etc/nginx/sites-enabled/

最后,我们使用sudo nginx -t 和 sudo systemctl reload nginx来测试和启用这些站点即可。如果需要在内网访问,请编辑你的hosts文件,将这些域名与ip地址一一对应。例如:

  1. 10.0.0.35 wordpress.local
  2. 10.0.0.36 wiki.local
  3. 10.0.0.37 filebrowser.local

接下来,只需要把相应的网络应用放入对应的目录,并进行基础设置即可。

cd /var/www/wordpress.local
# Download and extract WordPress
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz --strip-components=1
rm latest.tar.gz
sudo chown -R www-data:www-data /var/www/wordpress.local
cd /var/www/wiki.local
git clone https://github.com/BookStackApp/BookStack.git .
cp .env.example .env
# Edit .env for DB settings
composer install --no-dev
npm install && npm run build
php artisan key:generate
php artisan migrate
sudo chown -R www-data:www-data /var/www/wiki.local
# Download and run FileBrowser (example for Linux x64)
wget -O filebrowser.tar.gz https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz
tar -xzvf filebrowser.tar.gz
sudo mv filebrowser /usr/local/bin/
filebrowser -r /var/www/filebrowser.local --port 8080 &
滚动至顶部