文章目录
一、卸载原装Nginx二、通过 OneinStack 安装 Nginx三、创建 vhost四、按照提示选择或输入相关信息文章PDF下载
配不好Nginx
,誓不罢休
本教程适用于
不会配置Nginx懒得倒腾的小白站长多个网站需要配置Nginx
本文并没有强调如何配置多个网站,但是,配置多个网站、域名同样可以使用本教程,本人亲测有效,请放心食用。
在配置多个网站时,可以忽略已经配置过的网站,直接启动vhost
脚本配置新的域名即可,需要注意的是,单机配置多个网站一定要注意端口不能重复使用。
一、卸载原装Nginx
很多Nginx用户都是自己配置不成功才转而投奔OneinStack的,所以服务器上可能装有Nginx,为了避免不必要的麻烦,建议卸载原装Nginx:
sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。
二、通过 OneinStack 安装 Nginx
点击下方链接进入 OneinStack 官网,仅选择 安装 Nginx,其他的都可以取消选择。
/auto
最后点击 复制安装命令 到服务器执行即可。如果你仅安装 Nginx,你的链接应该是这样:
wget -c /oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1
这一步会经过编译安装,可能会导致安装时间很漫长,这主要取决于你服务器的性能。
提示: 如果命令执行不成功,可以分开执行每一条命令(最后安装命令需要管理员权限
sudo
)
出现下面的信息即代表安装成功:
Nginx installed successfully!Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.Redirecting to /bin/systemctl start nginx.service####################Congratulations########################Total OneinStack Install Time: 5 minutesNginx install dir: /usr/local/nginx
三、创建 vhost
即创建一个站点,你可以通过这样的方式在你的服务器创建无限个站点。接下来的目的就是创建一个站点,并反向代理到你的网站。这一步在此教程使用 ahoh.club 这个域名做演示,实际情况请修改此域名。
进入到 oneinstack 目录,执行 vhost 创建命令
cd oneinstack
sudo sh vhost.sh
如果出现以下异常:
vhost.sh: 23: pushd: not foundvhost.sh: 40: ./include/check_os.sh: [[: not foundvhost.sh: 40: ./include/check_os.sh: vhost.sh: 40: ./include/check_os.sh: ^RedHat$: not found^Rocky$: not foundvhost.sh: 40: ./include/check_os.sh: ^openEuler$: not found
请使用命令:
sudo ./vhost.sh
四、按照提示选择或输入相关信息
证书配置方式What Are You Doing?1. Use HTTP Only2. Use your own SSL Certificate and Key3. Use Let's Encrypt to Create SSL Certificate and Keyq. ExitPlease input the correct option:
这一步是选择证书配置方式,如果你有自己的证书,输入 2 即可。如果需要使用 Let’s Encrypt 申请证书,选择 3 即可。(本例中,我们需要使用https访问网站,所以选2)
配置域名
Please input domain(example: ):
输入自己的域名即可,前提是已经提前解析好了域名。(本例中,输入www.ahoh.club)
域名根目录
Please input the directory for the domain:www.ahoh.club :(Default directory: /data/wwwroot/www.ahoh.club):
提示输入站点根目录,因为我们是使用 Nginx 的反向代理,所以这个目录是没有必要配置的,我们直接使用默认的即可(直接回车)。
是否添加其他域名
Do you want to add more domain name? [y/n]: y
是否需要添加其他域名,按照需要选择即可,如果不需要,输入 n 即可,这里我们选择y
。
添加新域名强调:正常情况下,我们不仅仅希望使用地址
www.ahoh.club
访问网站,同时还希望使用ahoh.club
也可以访问我们的网站,所以这里需要选择y
,把ahoh.club
也要加进去。
ahoh.club
属于根域名,www.ahoh.club
属于子域名,如果你有类似于forum.ahoh.club
,这里同样需要选择y
,从而把所有希望跳转网站的域名都加进去。
Type domainname or IP(example: ): ahoh.club
这里我们就把ahoh.club
输进去。
域名跳转
Do you want to redirect from ahoh.club to www.ahoh.club? [y/n]: y
这里是决定 是否需要将 ahoh.club 自动跳转到 www.ahoh.club ,本例中选择y
。
提示: 原则上,这里跳不跳转都是可以的,但是在安装 NodeBB 期间,遇到了一个奇怪的BUG,当使用
ahoh.club
访问贴子的时候,外网连接图片就显示不出来,而使用www.ahoh.club
访问就可以。所以本例选择了跳转。
HTTP
跳转HTTPS
Do you want to redirect all HTTP requests to HTTPS? [y/n]: y
这里决定是否将HTTP
访问跳转到HTTPS
,这里跳不跳都行,但是既然都选择了SSL
,跳转当然更Fashion
,推荐选择y
。
位置信息询问
不想填可以直接回车,建议好好填写。
You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.Country Name (2 letter code) [CN]: State or Province Name (full name) [Shanghai]: BeijingLocality Name (eg, city) [Shanghai]: HaidianOrganization Name (eg, company) [Example Inc.]: AhohOrganizational Unit Name (eg, section) [IT Dept.]:
防盗链
Do you want to add hotlink protection? [y/n]: n
是否需要做防盗链处理,按照需要选择即可,本例我们选择n
。(如果是自己搭的小网站,不建议选择,可能导致图片不显示,确有需要可以选择,如有问题可以再解决。)
路径重写
Allow Rewrite rule? [y/n]: n
路径重写配置,我们不需要,选择n
回车确定即可。
请求日志
Allow Nginx/Tengine/OpenResty access_log? [y/n]: y
Nginx 的请求日志,建议选择y
。
这样就完成了 vhost 站点的创建,最终会输出站点的相关信息:
######################################################################## OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+## For more information please visit ########################################################################Your domain: www.ahoh.clubVirtualhost conf: /usr/local/nginx/conf/vhost/www.ahoh.club.confDirectory of: /data/wwwroot/www.ahoh.clubSelf-signed SSL Certificate: /usr/local/nginx/conf/ssl/www.ahoh.club.crtSSL Private Key: /usr/local/nginx/conf/ssl/www.ahoh.club.keySSL CSR File: /usr/local/nginx/conf/ssl/www.ahoh.club.csr# Nginx 的配置文件即 /usr/local/nginx/conf/vhost/www.ahoh.club.conf。
别忘了把SSL证书中的文件复制到上面的指定位置!
SSL证书压缩包中通常有四个文件,只需要复制其中的三个就行了
在复制的时候以后缀名为区分
复制示例如下:
sudo cp ~/ssl/ahoh.club_bundle.crt /usr/local/nginx/conf/ssl/ahoh.club.crt
五、 修改 Nginx 配置文件
上方创建vhost
的过程并没有创建反向代理的配置,所以需要我们自己修改一下配置文件。
使用你熟悉的工具打开配置文件,此教程使用vim
。
sudo vim /usr/local/nginx/conf/vhost/www.ahoh.club.conf
删除一些不必要的配置
location ~ [^/]\.php(/|$) {#fastcgi_pass remote_php_ip:9000;fastcgi_pass unix:/dev/shm/php-cgi.sock;fastcgi_index index.php;include fastcgi.conf;}
此段配置是针对 php 应用的,删不删都可以,但是本着极致的极客精神,本例中决定删掉。
添加upstream
配置
在server
的同级节点添加如下配置:
upstream ahoh {server 127.0.0.1:8090;}
在 server 节点添加提示,127.0.0.1指的是服务器的本机地址不需要改,后面的8090端口号需要改成自己的。
upstream
后面的名字ahoh
可以自己决定,然后记下来,后面的对应节点改成一致就行。
/
配置location / {proxy_set_header HOST $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://ahoh;}
修改提示:
proxy_pass http://ahoh;
中的网址,指向的就是上面一步upstream
后面的名字,如果修改了那个名字,这里要对应修改。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$
节点location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {proxy_pass http://ahoh; # 和上面一样修改expires 30d;access_log off;}
修改location ~ .*\.(js|css)?$
节点
location ~ .*\.(js|css)?$ {proxy_pass http://ahoh; # 和上面一样修改expires 7d;access_log off;}
如果不按照第4、5 以上两步操作,请求一些图片或者样式文件不会经过ahoh
,也就是你的网站,所以请不要忽略此配置。
添加acme.sh
续签验证路由
OneinStack
使用的acme.sh
管理证书,如果你在创建vhost
的时候选择了使用Let's Encrypt
申请证书,那么OneinStack
会在系统内添加一个定时任务去自动续签证书,acme.sh
默认验证站点所有权的方式为在站点根目录生成一个文件(.well-known
)来做验证,由于配置了反向代理,所以在验证的时候是无法直接访问到站点目录下的.well-known
文件夹下的验证文件的。需要添加如下配置:
location ^~ /.well-known/acme-challenge/ {default_type "text/plain";allow all;root /data/wwwroot/www.ahoh.club/;}
提示:如果第一步中,你没有选择
3
,就不用操作这一步。
至此,配置修改完毕,保存即可。最终你的配置文件可能如下面配置一样:
upstream ahoh{server 127.0.0.1:8090;}server {listen 80;listen [::]:80;listen 443 ssl http2;listen [::]:443 ssl http2;ssl_certificate /usr/local/nginx/conf/ssl/www.ahoh.club.crt;ssl_certificate_key /usr/local/nginx/conf/ssl/www.ahoh.club.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;ssl_session_timeout 10m;ssl_session_cache builtin:1000 shared:SSL:10m;ssl_buffer_size 1400;add_header Strict-Transport-Security max-age=15768000;ssl_stapling on;ssl_stapling_verify on;server_name www.ahoh.club ahoh.club;access_log /data/wwwlogs/www.ahoh.club_nginx.log combined;index index.html index.htm index.php;root /data/wwwroot/www.ahoh.club;if ($ssl_protocol = "") { return 301 https://$host$request_uri; }if ($host != www.ahoh.club) { return 301 $scheme://www.ahoh.club$request_uri; }include /usr/local/nginx/conf/rewrite/none.conf;#error_page 404 /404.html;#error_page 502 /502.html;location / {proxy_set_header HOST $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://ahoh;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {expires 30d;proxy_pass http://ahoh;access_log off;}location ~ .*\.(js|css)?$ {expires 7d;proxy_pass http://ahoh;access_log off;}location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {deny all;}location /.well-known {allow all;}}
六、 重载 Nginx 使配置生效
验证nginx
配置
Nginx
默认安装在/usr/local/nginx
,由于本文未配置环境变量,需要进入可执行文件目录下操作。
cd /usr/local/nginx/sbinsudo ./nginx -t
如果输出如下提示则代表配置有效:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重载 Nginx 配置:
sudo nginx -s reload
至此,整个教程完毕,现在你可以访问域名检查是否已经配置成功。
如果访问网址不成功,可以查看nginx的错误日志:
cat /usr/local/nginx/logs/error.log
有任何问题,都可以留言交流。
文章PDF下载