我再也不毒奶自己了

之前说服务器好像稳定了,然而发现没有https。。。折腾了一晚上终于配好了nginx,也顺便学了点nginx

nginx的作用

  1. nginx是什么
    Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
  2. 关于代理
  • 正向代理
          在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
          上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息

正向代理的作用: - 访问原来无法访问的资源,如Google - 可以做缓存,加速访问资源 - 对客户端访问授权,上网进行认证 - 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
  • 反向代理
    多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

用nginx配置https访问

以halo为例,nginx版本为1.1.6

  1. 安装nginx
# 添加 Nginx 源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 安装 Nginx
sudo yum install -y nginx

# 启动 Nginx
sudo systemctl start nginx.service

# 设置开机自启 Nginx
sudo systemctl enable nginx.service
  1. 直接配置nginx.conf文件(没有使用halo官方的nignx配置
  • 终端输入
vi /etc/nginx/nginx.conf 
  • 具体配置
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  768;
}
http {

	##
	# Basic Settings
	##
server {
        listen 443 ssl;
        server_name 填写域名,带www和不带www,空格隔开;
        ssl_certificate  填写证书位置,绝对路径;
        ssl_certificate_key 填写秘钥位置,绝对路径;
        ssl_session_timeout 5m;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
        ssl_prefer_server_ciphers on;
        location / {
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Real-PORT $remote_port;
        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和不带www,空格隔开;
    rewrite ^(.*)$ https://$host$1 permanent; 
       }
}

其中,80端口下rewrite ^(.*)$ https://$host$1 permanent; 为重定向,即强制https访问。

  1. 修改完成后
# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

检测过程没有报错就可以正常访问了

  1. 踩过的坑
  • 一些较老的配置文件中会在监听443端口的配置中出现以下代码
server{
	listen 443 ssl;
	....
	....
	ssl on; //这样的写法只在1.1.5之前的版本中出现,所以说目前环境下是要删掉这句话的QAQ
	....

}
<br/>
  • 使用了halo官方教程安装和配置nginx后,nginx的config文件变成了
/etc/nginx/conf.d/halo.conf
而不是
/etc/nginx/nginx.conf

这种情况我通过重装nginx解决

1. 卸载nginx
nginx   yum remove nginx
2. 进入/etc目录下,手动删除nginx目录
rm -rf /etc/nginx
3. 安装nginx

折腾一晚上终于搞定https访问了


What is broken can be reforged.