Nginx反向代理、使用OneinStack配置Nginx、多网站配置、多域名配置

文章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,其他的都可以取消选择。

https://oneinstack.com/auto

最后点击 复制安装命令 到服务器执行即可。如果你仅安装 Nginx,你的链接应该是这样:

wget -c http://mirrors.linuxeye.com/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 minutes

Nginx install dir:              /usr/local/nginx

三、创建 vhost

即创建一个站点,你可以通过这样的方式在你的服务器创建无限个站点。接下来的目的就是创建一个站点,并反向代理到你的网站。这一步在此教程使用 ahoh.club 这个域名做演示,实际情况请修改此域名。

进入到 oneinstack 目录,执行 vhost 创建命令

cd oneinstack
sudo sh vhost.sh

如果出现以下异常:

vhost.sh: 23: pushd: not found
vhost.sh: 40: ./include/check_os.sh: [[: not found
vhost.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

四、按照提示选择或输入相关信息

  1. 证书配置方式
What Are You Doing?
    1. Use HTTP Only
    2. Use your own SSL Certificate and Key
    3. Use Let's Encrypt to Create SSL Certificate and Key
    q. Exit
Please input the correct option:

这一步是选择证书配置方式,如果你有自己的证书,输入 2 即可。如果需要使用 Let’s Encrypt 申请证书,选择 3 即可。(本例中,我们需要使用https访问网站,所以选2)

  1. 配置域名
Please input domain(example: www.example.com):

输入自己的域名即可,前提是已经提前解析好了域名。(本例中,输入www.ahoh.club)

  1. 域名根目录
Please input the directory for the domain:www.ahoh.club :
(Default directory: /data/wwwroot/www.ahoh.club):

提示输入站点根目录,因为我们是使用 Nginx 的反向代理,所以这个目录是没有必要配置的,我们直接使用默认的即可(直接回车)。

  1. 是否添加其他域名
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,从而把所有希望跳转网站的域名都加进去。

  1. 添加新域名
Type domainname or IP(example: example.com other.example.com): ahoh.club

这里我们就把 ahoh.club 输进去。

  1. 域名跳转
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 访问就可以。所以本例选择了跳转。

  1. HTTP跳转HTTPS
Do you want to redirect all HTTP requests to HTTPS? [y/n]: y

这里决定是否将HTTP 访问跳转到HTTPS,这里跳不跳都行,但是既然都选择了SSL,跳转当然更 Fashion,推荐选择 y

  1. 位置信息询问
    不想填可以直接回车,建议好好填写。
You are about to be asked to enter information that will be incorporated
into 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 blank
For 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]: Beijing

Locality Name (eg, city) [Shanghai]: Haidian

Organization Name (eg, company) [Example Inc.]: Ahoh

Organizational Unit Name (eg, section) [IT Dept.]: 

  1. 防盗链
Do you want to add hotlink protection? [y/n]: n

是否需要做防盗链处理,按照需要选择即可,本例我们选择 n。(如果是自己搭的小网站,不建议选择,可能导致图片不显示,确有需要可以选择,如有问题可以再解决。)

  1. 路径重写
Allow Rewrite rule? [y/n]: n

路径重写配置,我们不需要,选择 n 回车确定即可。

  1. 请求日志
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 https://oneinstack.com      #
#######################################################################
Your domain:                  www.ahoh.club
Virtualhost conf:             /usr/local/nginx/conf/vhost/www.ahoh.club.conf
Directory of:                 /data/wwwroot/www.ahoh.club
Self-signed SSL Certificate:  /usr/local/nginx/conf/ssl/www.ahoh.club.crt
SSL Private Key:              /usr/local/nginx/conf/ssl/www.ahoh.club.key
SSL 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
  1. 删除一些不必要的配置
location ~ [^/]\.php(/|$) {
  #fastcgi_pass remote_php_ip:9000;
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
}

此段配置是针对 php 应用的,删不删都可以,但是本着极致的极客精神,本例中决定删掉。

  1. 添加 upstream 配置
    server 的同级节点添加如下配置:
upstream ahoh {
  server 127.0.0.1:8090;
}

提示,127.0.0.1指的是服务器的本机地址不需要改,后面的8090端口号需要改成自己的。
upstream 后面的名字 ahoh 可以自己决定,然后记下来,后面的对应节点改成一致就行。

  1. 在 server 节点添加/配置
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 后面的名字,如果修改了那个名字,这里要对应修改。

  1. 修改 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;
}
  1. 修改 location ~ .*\.(js|css)?$ 节点
location ~ .*\.(js|css)?$ {
  proxy_pass http://ahoh; # 和上面一样修改
  expires 7d;
  access_log off;
}

如果不按照第4、5 以上两步操作,请求一些图片或者样式文件不会经过 ahoh,也就是你的网站,所以请不要忽略此配置。

  1. 添加 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 使配置生效

  1. 验证 nginx 配置

Nginx默认安装在 /usr/local/nginx,由于本文未配置环境变量,需要进入可执行文件目录下操作。

cd /usr/local/nginx/sbin
sudo ./nginx -t

如果输出如下提示则代表配置有效:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  1. 重载 Nginx 配置:
sudo nginx -s reload

至此,整个教程完毕,现在你可以访问域名检查是否已经配置成功。


如果访问网址不成功,可以查看nginx的错误日志:

cat /usr/local/nginx/logs/error.log

有任何问题,都可以留言交流。

文章PDF下载

你可能感兴趣的:(nginx,运维,oneinstack)