安装
CentOS Linux release 7.5.1804 (Core)
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
Ubuntu 20.04
sudo apt update
sudo apt install nginx
初始配置
#设置开机启动
systemctl enable nginx
#启动服务
systemctl start nginx
systemctl restart nginx
systemctl reload nginx
nginx 路径
whereis nginx
/etc/nginx/
nginx的403 Forbidden解决的办法(权限文件和文件不存在):
在 nginx.conf
文件中 第一行改为 user root
配置举例
Aria2
server {
listen 80 default_server;
server_name aria.whackeralpha.com;
root /root/aria2/ariaNg;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
webdav
server{
server_name webdav.whackeralpha.com;
client_max_body_size 1g;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
dropbox
server{
listen 80;
server_name file.whackeralpha.com;
location / {
proxy_pass https://dl.dropboxusercontent.com;
}
}
server{
listen 80;
server_name apia.whackeralpha.com;
location / {
proxy_pass https://api.dropboxapi.com;
}
}
server{
listen 80;
server_name apid.whackeralpha.com;
location / {
proxy_pass https://api.dropbox.com;
}
}
server{
listen 80;
server_name contenta.whackeralpha.com;
location / {
proxy_pass https://content.dropboxapi.com;
}
}
server{
listen 80;
server_name notifya.whackeralpha.com;
location / {
proxy_pass https://notify.dropboxapi.com;
}
}
server{
listen 80;
server_name dr.whackeralpha.com;
location / {
proxy_pass https://www.dropbox.com;
}
}
minio
server{
server_name backup.whackeralpha.com;
client_max_body_size 20g;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $host;
}
}
seafile
server{
server_name seafile.jtxiao.com;
client_max_body_size 20g;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
}
}
express
server{
server_name whackeralpha.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
}
}
cloudreve
server{
server_name cloud.jtxiao.com;
client_max_body_size 20g;
location / {
proxy_pass http://127.0.0.1:5212;
proxy_set_header Host $host;
}
}
tencent cos
server{
server_name scoop.jtxiao.com;
location / {
proxy_pass https://scoop-1257291176.cos.ap-hongkong.myqcloud.com;
proxy_set_header referer https://scoop.jtxiao.com;
proxy_set_header Host scoop-1257291176.cos.ap-hongkong.myqcloud.com;
}
}
aliyun oos
server{
server_name minio.whackeralpha.com;
location / {
proxy_pass https://alpha-alpha.oss-cn-hongkong-internal.aliyuncs.com;
proxy_set_header referer https://minio.whackeralpha.com;
proxy_set_header Host alpha-alpha.oss-cn-hongkong-internal.aliyuncs.com;
}
}
blackblaze + cloudflare
server{
server_name c-b2.whackeralpha.com;
location / {
proxy_pass https://b2.whackeralpha.com/file/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host b2.whackeralpha.com;
proxy_ssl_server_name on;
proxy_ssl_name b2.whackeralpha.com;
}
}
cloudflare + google drive
server{
server_name d.whackeralpha.com;
location / {
proxy_pass https://pan.whackeralpha.com;
proxy_set_header Host pan.whackeralpha.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_server_name on;
proxy_ssl_name pan.whackeralpha.com;
}
}
url分路径 + autoindex + aria
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name i.whackeralpha.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /privacy {
alias /root/dropbox/privacy/;
}
location /index {
alias /root/dropbox/index/;
autoindex on;
autoindex_format html;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk; #展示中文文件名
}
location /aria {
alias /root/.aria2/ariang/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
打开防火墙端口
默认 CentOS7 使用的防火墙 firewalld 是关闭 http 服务的(打开 80 端口)。
$ sudo firewall-cmd --zone=public --permanent --add-service=http
success
$ sudo firewall-cmd --reload
success
打开之后,可以查看一下防火墙打开的所有的服务
firewall-cmd --list-service
ssh dhcpv6-client http
可以看到,系统已经打开了 http 服务。
访问限制【待研究】
1. 添加limit_req_zone
这个变量只能在http使用
http{
...
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为5个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s;
...
2. 添加limit_req
这个变量可以在http, server, location使用 只限制一个站点,所以添加到server里面
...
server{
...
location {
...
#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
Nginx浏览目录配置及美化(复制)
在项目中有一个功能需要在浏览器页面中浏览服务器的目录。服务器使用Nginx,而Nginx提供了相应的ngx_http_autoindex_module 模块,该模块提供了我们想要的功能。
Nginx-Fancyindex-Theme
这是从一个项目Fork过来,做了部分改动,并修复了少量bug后的完整的可用项目,需要的可以参考:Nginx-Fancyindex-Theme
Nginx ngx_http_autoindex_module 模块
该模块有以下几个命令:
命令 | 默认值 | 值域 | 作用域 | EG |
---|---|---|---|---|
autoindex | off | on:开启目录浏览; off:关闭目录浏览 |
http, server, location | autoindex on;打开目录浏览功能 |
autoindex_format | html | html、xml、json、jsonp 分别用这几个风格展示目录 | http, server, location | autoindex_format html; 以网页的风格展示目录内容。该属性在1.7.9及以上适用 |
autoindex_exact_size | on | on:展示文件字节数; off:以可读的方式显示文件大小 |
http, server, location | autoindex_exact_size off; 以可读的方式显示文件大小,单位为 KB、MB 或者 GB,autoindex_format为html时有效 |
autoindex_localtime | off | on、off:是否以服务器的文件时间作为显示的时间 | http, server, location | autoindex_localtime on; 以服务器的文件时间作为显示的时间,autoindex_format为html时有效 |
浏览目录基本配置
根据上面的命令,一个简单的Nginx浏览目录的配置如下:
location /download
{
root /home/map/www/; #指定目录所在路径
autoindex on; #开启目录浏览
autoindex_format html; #以html风格将目录展示在浏览器中
autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
autoindex_localtime on; #以服务器的文件时间作为显示的时间
}
页面展示如下:

可以看到页面中的展示信息和配置想要的一致,但还有个问题是中文文件名显示的时候乱码。
中文文件名乱码
要解决上面的问题,只需要添加如下配置即可:
charset utf-8,gbk; #展示中文文件名
完整配置如下:
location /download
{
root /home/map/www/; #指定目录所在路径
autoindex on; #开启目录浏览
autoindex_format html; #以html风格将目录展示在浏览器中
autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
autoindex_localtime on; #以服务器的文件时间作为显示的时间
charset utf-8,gbk; #展示中文文件名
}
页面展示如下:

文件列表的第一行是一个目录,点进去,展示如下:

稍微有一点审美的同学是不是觉得这样展示不太美观呢?是的,很不美观,感觉乱糟糟的。下面就来解决这个问题。
目录浏览美化
我们使用开源的Fancy Index来美化页面,Github看这里
在美化之前,需要安装Nginx FancyIndex模块。安装模块步骤如下。
查看Nginx当前编译了哪些模块
要查看Nginx编译了哪些模块,执行以下命令:2>&1 nginx -V | tr ' ' '\n'|grep module
,如下:

查看完整的编译参数:nginx -V
,如下:

内容如下:
nginx version: nginx/1.13.8
built by clang 9.0.0 (clang-900.0.39.2)
built with OpenSSL 1.1.0f 25 May 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre --sbin-path=/usr/local/nginx/bin/nginx --with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl@1.1/include' --with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl@1.1/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp --http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp --http-log-path=/usr/local/var/log/nginx/access.log --error-log-path=/usr/local/var/log/nginx/error.log --with-http_gzip_static_module --with-http_v2_module
动态编译添加Nginx模块
- 在GitHub下载最新源码:ngx-fancyindex
- 源码下载下来后,解压,放到nginx源码目录(/usr/local/nginx)中,执行下面的代码,编译: ./configure –prefix=/usr/local/nginx –with-http_ssl_module –with-pcre –sbin-path=/usr/local/nginx/bin/nginx –with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl@1.1/include' –with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl@1.1/lib' –conf-path=/usr/local/etc/nginx/nginx.conf –pid-path=/usr/local/var/run/nginx.pid –lock-path=/usr/local/var/run/nginx.lock –http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp –http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp –http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp –http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp –http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp –http-log-path=/usr/local/var/log/nginx/access.log –error-log-path=/usr/local/var/log/nginx/error.log –with-http_gzip_static_module –with-http_v2_module –add-module=ngx-fancyindex-0.4.2 make 这里不要make install!!!
- 进入nginx源码目录下的
objs
目录,执行2>&1 ./nginx -V | tr ' ' '\n'|grep fan
- 用
objs
目录下的nginx文件替换/usr/bin下面的nginx即可
选择Fancy Index主题 在Github里面找到了两个开源的主题,分别是:
- https://github.com/Naereen/Nginx-Fancyindex-Theme
- https://github.com/TheInsomniac/Nginx-Fancyindex-Theme
大家选一个自己喜欢的就好了,这里我选的是第一个。 但是在实际使用过程中,第一个代码有一些问题,我做了一些修改,想要直接可以使用的,可以用这个:https://github.com/lanffy/Nginx-Fancyindex-Theme Fancy Index 配置
- 进入Nginx安装的web目录,执行
nginx -V
,输出configure arguments: --prefix=/usr/local/nginx
,就是这个目录 git clone https://github.com/lanffy/Nginx-Fancyindex-Theme.git - 在nginx location模块中添加Fancy Index配置,如下: location /download { include /usr/local/nginx/html/Nginx-Fancyindex-Theme/fancyindex.conf; # 目录美化配置 root /home/map/www/; #指定目录所在路径 autoindex on; #开启目录浏览 autoindex_format html; #以html风格将目录展示在浏览器中 autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB autoindex_localtime on; #以服务器的文件时间作为显示的时间 charset utf-8,gbk; #展示中文文件名 }
- 重启Nginx即可
到这一步就完成配置了,最终页面展示如下:

该主题有两种风格,上面一种是light风格,下面的是dark风格:

风格在/usr/local/nginx/html/Nginx-Fancyindex-Theme/fancyindex.conf;
配置文件中进行修改。
参考资料
certbot
安装
CentOS Linux release 7.5.1804 (Core) (aliyun)
yum -y install yum-utils
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
yum install certbot python3-certbot-nginx
Ubuntu20.02
apt install certbot python3-certbot-nginx
用法示例
certbot --nginx
证书更新
certbot renew
自动更新
配合 crontab 文章
一个报错
在用了很久之后,也许是因为注册了很多域名,有一次使用时候报了一个错误:
An unexpected error occurred:
The server experienced an internal error :: Error retrieving account "https://acme-v02.api.letsencrypt.org/acme/acct/112535668"
多方搜索,发现可能是因为账户问题,那就删除原来的邮箱账户后重新注册一个吧。
mv /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org.old
然后重新运行并使用新邮箱后仍然有错误
An unexpected error occurred:
The server experienced an internal error :: Error creating new order
只好又退回了:退回指令
mv /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org.old /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org
发现重新运行后又正常了