Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
一、正向代理与反向代理
什么是代理?
代理其实就是一个中介,A 和 B 原本是可以直连的,但由于某种原因无法直连,需要一个中介,这个中介就是代理。
正向代理
例如由于防火墙的原因,我们并不能直接访问一些网站,那么我们可以借助工具来实现,这就是一个简单的正向代理的例子。
反向代理
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
二、下载 Nginx
这里以 Mac 电脑为例。
1、安装 Homebrew
Homebrew 是什么?
Homebrew 是 Mac 的包管理器,仅需执行相应的命令,就能下载安装需要的软件包,可以省掉自己去下载、解压、安装等繁琐的步骤。
方法一:brew 官网安装脚本
执行命令:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
这时很可能会出现一个问题:要么下载极其龟速,要么直接出现如下提示
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
原因是 http://raw.githubusercontent.com
访问不稳定引起的。
此时需要换一种科学高效的安装方法,即方法二。
方法二:brew 镜像安装脚本
/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
该脚本用了中科大镜像加速访问,仅修改仓库地址部分,不会产生安全隐患。
2、安装 Nginx
使用 Homebrew 安装 Nginx:
$ brew install nginx
检查nginx是否安装成功,在终端输入:
$ nginx -v
nginx version: nginx/1.21.2
3、启动 Nginx
$ nginx
OK,Nginx 就启动了,
在浏览器输入 http://localhost:8080/
就能看到 Nginx 在本机搭建的服务器,默认端口为8080。
三、配置代理路径
编辑 Nginx 配置文件
$ vim /usr/local/etc/nginx/nginx.conf
在配置文件 nginx.conf 中的 http 区域内,可以配置无数个 server ,每一个 server 对应这一个虚拟主机或者域名。
http {
......
server {
listen 80 #监听端口;
server_name localhost #地址
location / { #访问首页路径
root /xxx/xxx/index.html #默认目录
index index.html index.htm #默认文件
}
error_page 500 504 /50x.html #当出现以上状态码时从新定义到50x.html
location = /50x.html { #当访问50x.html时
root /xxx/xxx/html #50x.html 页面所在位置
}
}
server {
... ...
}
}
想要搭建文件服务器,首先需要开启文件服务:
autoindex on; # 显示目录
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件时间
然后修改其中一个 server 就可以了,最后的 nginx.conf 配置如下:
http {
autoindex on; # 显示目录
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件时间
server {
listen 80 # 监听端口;
server_name localhost # 地址
charset utf-8; # 中文名的文件不乱码.
location / { # 访问首页路径
root /xxx/xxx/ # 根目录
index index.html index.htm # 默认文件
}
error_page 500 504 /50x.html # 当出现以上状态码时从新定义到50x.html
location = /50x.html { # 当访问50x.html时
root /xxx/xxx/html # 50x.html 页面所在位置
}
}
}
重点是设置 location 中 root 的路径,设置为需要访问的路径,如果路径中无 index 文件,则会打开文件,如下图:
如果有 index 中设置的文件,则会打开对应的 HTML 页面。
四、用户登录认证
现在局域网上所有人都可以通过链接访问刚搭建好的文件服务器了,但实际情况中,只想让授权的用户登录,所以我们再加上登录认证。
这里使用 htpasswd 工具来生成密码。htpasswd 是 apache 的一个工具,主要用于建立和更新存储用户名、密码的文本文件,用于对 http 用户的认证。
1、创建认证用户
$ htpasswd -c /xxx/mypass.db my_username
其中:htpasswd -c
是创建一个加密文件,/xxx/mypass.db
为加密文件生成路径和文件名,my_username
自定义用户名,回车后输入密码,就生成了一个加密文件,默认使用 MD5 加密。
再添加一个用户:
$ htpasswd /xxx/mypass.db my_test
注意:一定要去掉 -c
选项,否则会覆盖原文件再创建。
2、修改 Nginx 配置文件
生成密码文件后,再修改 Nginx 配置文件的内容,在 server 中加入:
auth_basic "User Authentication";
auth_basic_user_file /xxx/mypass.db;
加入后,配置如下:
server {
listen 80;
server_name localhost;
auth_basic "User Authentication"; ## 认证弹窗提示语
auth_basic_user_file /xxx/mypass.db; ## 密码文件路径
charset utf-8; # 中文名的文件不乱码.
......
}
重新载入 Nginx 配置文件,刷新界面,效果如下:
输入自定义的用户名和密码即可正常访问。
Nginx 常用命令
$ nginx # 启动 Nginx
$ nginx -s reload # 重新载入配置文件
$ nginx -s reopen # 重启 Nginx
$ nginx -s stop # 停止 Nginx