跳转至

OneinStack 安装nginx, 并配置一个网站

安装

点击链接https://oneinstack.com/auto进入 OneinStack 官网,仅选择 安装 Nginx,其他的都可以取消选择

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

wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1

这一步会经过编译安装, 可能会导致安装时间很漫长, 这主要取决于你服务器的性能

出现下面的信息即代表安装成功

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

如果nginx命令未找到, 可以手动尝试创建软连接到path

# 上面的Nginx install dir
ln -s /usr/local/nginx/sbin/nginx /usr/bin

使用vhost 创建一个网站

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

coder.rs属于根域名, www.coder.rs 属于子域名, 请注意dns配置coder.rs和www.coder.rs都需要配置一条规则

vhost.sh 创建命令:

cd oneinstack
sh vhost.sh  # 或者 ./vhost.sh

选择证书

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, 注意请在这个网站检测自己的80或者443端口是否开放https://tool.chinaz.com/port

输入自己的网站域名

先输入www.coder.rs, 等下还需要输入coder.rs

Please input domain(example: www.example.com):www.coder.rs

设置站点目录

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

Please input the directory for the domain:www.coder.rs :
(Default directory: /data/wwwroot/www.coder.rs): 

添加其他域名

还需要继续添加, 输入 y , 并继续输入域名

Do you want to add more domain name? [y/n]: y
Type domainname or IP(example: example.com other.example.com): coder.rs

设置跳转

一般情况我们不仅仅希望使用地址 www.coder.rs 访问网站,同时还希望使用 coder.rs 也可以访问我们的网站,所以这里需要选择 y, 把 coder.rs 也要加进去

Do you want to redirect from coder.rs to www.coder.rs? [y/n]:y

http跳转https

但是既然都选择了SSL, 跳转当然更 Fashion,推荐选择 y

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

申请证书

默认确定即可

Please select domain cert key length.
Enter one of 2048, 3072, 4096, 8192 will issue a RSA cert.
Enter one of ec-256, ec-384, ec-521 will issue a ECC cert.

Please enter your cert key length (default 2048):  

证书使用邮箱

按照自己情况填写

Please enter your email:

添加防盗链

小站无所谓 n即可

Do you want to add hotlink protection? [y/n]:

路径重写配置

不需要 选择n即可

Allow Rewrite rule? [y/n]:

是否保留日志

建议保留 y

Allow Nginx/Tengine/OpenResty access_log? [y/n]:

创建成功信息

Your domain:                  www.coder.rs
Virtualhost conf:             /usr/local/nginx/conf/vhost/www.coder.rs.conf
Directory of:                 /data/wwwroot/www.coder.rs
Self-signed SSL Certificate:  /usr/local/nginx/conf/ssl/www.coder.rs.crt
SSL Private Key:              /usr/local/nginx/conf/ssl/www.coder.rs.key
SSL CSR File:                 /usr/local/nginx/conf/ssl/www.coder.rs.csr

删除和添加一些不必要的信息

打开上方的Virtualhost conf路径的文件

删除没用配置

# 全部删除
location ~ [^/]\.php(/|$) {
  #fastcgi_pass remote_php_ip:9000;
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
}

添加 upstream 配置

server 的同级节点添加如下配置:

upstream wordpress {
  server 127.0.0.1:8000;
}

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://wordpress;
}

修改配置

修改 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ 节点

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
  proxy_pass http://wordpress;
  expires 30d;
  access_log off;
}

修改 location ~ .*\.(js|css)?$ 节点

location ~ .*\.(js|css)?$ {
  proxy_pass http://wordpress;
  expires 7d;
  access_log off;
}

添加 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.coder.rs/;
}

## 重载 Nginx 使配置生效

### 验证 nginx 配置

bash nginx -t

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

bash 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

重载 Nginx 配置:

bash nginx -s reload

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

参考conf

server {
  listen 80;
  listen [::]:80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ssl_certificate /usr/local/nginx/conf/ssl/www.coder.rs.crt;
  ssl_certificate_key /usr/local/nginx/conf/ssl/www.coder.rs.key;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
  ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
  ssl_conf_command Options PrioritizeChaCha;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache shared:SSL:10m;
  ssl_buffer_size 2k;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name www.coder.rs coder.rs;
  access_log /data/wwwlogs/www.coder.rs_nginx.log combined;
  index index.html index.htm index.php;
  root /data/wwwroot/www.coder.rs;
  if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
  if ($host != www.coder.rs) {  return 301 $scheme://www.coder.rs$request_uri;  }
  include /usr/local/nginx/conf/rewrite/none.conf;
  #error_page 404 /404.html;
  #error_page 502 /502.html;

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    proxy_pass http://wordpress;
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    proxy_pass http://wordpress;
    expires 7d;
    access_log off;
  }
  location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
    deny all;
  }
  location /.well-known {
    allow all;
  }
  location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    allow all;
    root /data/wwwroot/www.coder.rs/;
  }

  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://wordpress;
  }
}

upstream wordpress {
  server 127.0.0.1:8000;
}