想知道你的文章需要耗时多久阅读?不妨 »点击这里« 试试看!
前情提要
没错,我每篇文章都有一个前情提要,但其实这一篇也没什么好写的。关于反向代理(或者说是网站服务)这个东西之前也属于是困扰了我很久。还记得一开始建站的时候就选择了宝塔面板直接搭建,然后各种翻车难顶,最后不得不把我的网站放到了第三方托管平台然后给他们更多的钱。当然你现在看到的网站内容还是沿用了第三方托管,毕竟人家也是真的稳。
本篇会主要讲一些关于Nginx的基础配置,希望这些内容可以很好地帮助未来的我和看这篇文章的你。
准备工作
你需要准备的东西有:
- 私有ip地址段(192.168.x.x或者10.0.x.x都行,你有钱也可以公网ip,没人问);
- 一台空闲的电脑,运行基于Ubuntu的Linux发行版(用别的也行,出问题自己看着办就是,没作业可抄)。
不完全必备的内容:
- 为机器分配多个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,最后检查是否正常运行。
sudo apt updatesudo apt install nginxsudo systemctl enable nginxsudo systemctl start nginxsudo systemctl status nginx
然后我们用下面两行命令让ufw放行所有来自Nginx的流量:
sudo ufw allow 'Nginx Full'sudo ufw enable
接下来,我们要知道所有的网站根目录都会被存储在/var/www/下,另外Nginx的配置文件被存放在/etc/nginx/sites-available/和/etc/nginx/sites-enabled中。前者是所有存在的网站,后者是启用的网站。
网络应用案例
接下来,让我们安装一些不同的网络应用(web applications),这样你就知道如果你有多个而非仅有一个站点的话要怎么操作了。我们这次就用WordPress, BookStack 和 FileBrowser 开刀。让我们先用以下命令新建目录,并给予用户相应权限。
sudo mkdir -p /var/www/wordpress.localsudo mkdir -p /var/www/wiki.localsudo mkdir -p /var/www/filebrowser.localsudo chown -R $USER:$USER /var/www/
下一步,是编辑 /etc/nginx/sites-available/当中的配置文件。我们通过
sudo nano /etc/nginx/sites-available/wordpress.localsudo nano /etc/nginx/sites-available/wiki.localsudo 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;
}
} 接下来,我们把这些配置文件链接到启用的网站配置文件目录中:
sudo ln -s /etc/nginx/sites-available/wordpress.local /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/wiki.local /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/filebrowser.local /etc/nginx/sites-enabled/
最后,我们使用sudo nginx -t 和 sudo systemctl reload nginx来测试和启用这些站点即可。如果需要在内网访问,请编辑你的hosts文件,将这些域名与ip地址一一对应。例如:
10.0.0.35 wordpress.local10.0.0.36 wiki.local10.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 & v1.0.0 - 更新于2025年05月23日。