0%

Nginx的安装配置

因为打算将博客从wordpress转到Halo,因此换了台ECS主机,并且需要配置Nginx反向代理,将其中遇到的“坑”记录下

前期准备:

  • 主机:阿里云的ECS服务器
  • 系统:ubuntu 16.04
  • 如有域名,先解析到到公网IP上 何为域名解析:

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务

仅仅域名解析后,我们访问博客时是需要IP+端口才行;但我们平时一般都是指输入网址,并没有输入端口等等,这是因此其中使用了反向代理技术

何为反向代理:

代理服务器是一个中间服务器,它主要是把英特网上的不同客户端的请求转发到不同的服务器上。而反向代理服务器则是代理服务器的一种,它也是把英特网上的不同客户端的请求转发到不同的服务器上,它这些服务器是位于某个私有网络中,且该私有网络具有防火墙(比如防火墙只允许该私有网络通过一个指定的 IP 与 端口与外网连接)。也就是说我们直接访问需要访问的服务器是不通的,这是需要反向代理才行

这里使用的是Nginx来反向代理

Nginx安装

sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

启动并设置开机自启

sudo systemctl start nginx.service
sudo systemctl status nginx.service
sudo systemctl enable nginx.service

如果正常的服务器,这是可以通过浏览器访问IP:80或者域名:80;如果出现Welcome to nginx,即说明安装成功

但是的新买的ECS主机的话,需要额外再检查下以下几点:

对于防火墙开启端口,可用以下方法:

firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload
# 看下已监听的端口
netstat -tlpn

获取免费的SSL证书

因为我的域名是阿里云的,所以我的SSL证书也是从阿里云上获取,有免费版的,可参考阿里云 SSL 免费证书使用

然后我将.pem.key后缀的两个文件放在了/usr/local/nginx/conf中,后续Nginx配置时需要用到

Nginx 配置

我的Nginx的配置文件是在:/etc/nginx/nginx.conf

Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值

nginx.conf是主要的配置文件,但从其代码中可发现,其还include了conf.dsites-enabled目录下的配置文件,如:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

所以我是将新增的配置放在/etc/nginx/sites-enabled/default文件中

Nginx配置的写法及其具体含义网上很多,比如可以参考阿里云服务器ecs配置之安装nginx,用到的时候可再查阅下,但是记得要理解!!!不然就要像我一样因为一个小小的用法错误而导致配置失败。。。

我的default配置文件如下:

server {
    listen 443 ssl;
    
    server_name bioinfo-scrounger.com www.bioinfo-scrounger.com;
    client_max_body_size 1g;
    
    ssl_certificate "/usr/local/nginx/conf/bioinfo-scrounger.com.pem";
    ssl_certificate_key "/usr/local/nginx/conf/bioinfo-scrounger.com.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
       
    location /  {
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass   http://127.0.0.1:8090/;
    }
}

server {  
    listen 80;  
    server_name www.bioinfo-scrounger.com;  
       
    rewrite ^(.*)$  https://$host$1 permanent;  
}
  • 由于我要以HTTPS访问网址,因此listen 444和ssl,这里必须要把ssl加上,不然会报错。。。。
  • ssl_certificate后面是证书的地址,有pem和key两个文件
  • location是用来将url来指定具体的服务,比如我这里要将域名指定到Halo博客的服务(http://127.0.0.1:8090/),因此proxy_pass后面接的服务比较重要。。。
  • 由于我想将HTTP的请求转发至HTTPS上,所以在listen 80后,再rewrite下;这里的写法有很多,可参考Nginx的https配置记录以及http强制跳转到https的方法梳理,都可以尝试下。。。。

修改后,可以用先用nginx -t检查下语法上是否有误,然后再加载下修改后的配置文件

nginx -s reload

PS. 如果报错:nginx: [error] invalid PID number "" in "/run/nginx.pid",只需要再加载前先执行下nginx -c /etc/nginx/nginx.conf

如果报错:端口被占用等信息的话,则将nginx进程kill掉,重新start下即可

最后在浏览器中输入域名即可打开Halo博客了~

参考资料

Nginx配置HTTPS并将HTTP请求重定向到HTTPS
配置域名解析以及Nginx反向代理
Nginx简单操作 | Nginx配置SSL证书
Nginx 入门教程

本文出自于http://www.bioinfo-scrounger.com转载请注明出处