centos 7 源码方式安装nginx(1.18.0) + ssl + 阿里证书配置

直接使用yum方式安装的ngninx默认是不支持ssl的,所以需要从代码编译安装

一、查看要安装的版本

http://nginx.org/en/download.html
这里我们选择的稳定版1.18.0

二、先安装依赖

安装依赖之前最好先执行下update

yum update

安装相关依赖

yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

三、下载源码

切换到/usr/local/src目录下,下载源代码解压

cd /usr/local/src
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz

四、编译源代码

切换目录

cd /usr/local/src/nginx-1.18.0

编译nginx,带:ssl/gzip/realip等功能

./configure  --prefix=/usr/local/nginx \
  --with-threads \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --with-http_ssl_module

以下是configure参数说明:

  • --with-threads:启用thread pool支持。
  • --with-http_realip_module:允许从请求报文头中更改客户端的ip地址,默认为关。
  • --with-http_stub_status_module:启用ngx_http_stub_status_module 支持查看nginx的状态页。
  • --with-http_ssl_module:启用ngx_http_gzip_static_module支持,支持在线实时压缩输出数据流。
  • --with-http_ssl_module:启用https支持。

编译成功后的截图

编译报错的解决办法,没有报错直接跳过

  1. 报错:./configure: error: the HTTP rewrite module requires the PCRE library.
    问题原因:编译安装nginx需要pcre包,未安装的话会报错
    解决办法:
    yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

  2. 报错:File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
    问题原因:yum采用python作为命令解释器,原来系统自带的python解释器为python2.7,系统默认的解释器为python3.7
    解决办法:
    vim /usr/bin/yum
    修改第一行为:#!/usr/bin/python2.7
    vi /usr/libexec/urlgrabber-ext-down
    修改第一行为:#!/usr/bin/python2.7

  3. 报错:File "/bin/yum-config-manager", line 135 except yum.Errors.RepoError, e:
    问题原因:yum采用python作为命令解释器,原来系统自带的python解释器为python2.7,系统默认的解释器为python3.7
    解决办法:
    vim /bin/yum-config-manager
    修改第一行为:#!/usr/bin/python2.7

  4. 报错:./configure: error: SSL modules require the OpenSSL library.
    问题原因: 缺少SSL库
    解决办法:yum -y install openssl openssl-devel

五、初次安装nginx

如果是第一次安装或已卸载后安装的话,用编译+安装指令:

make && make install

六、编译更新nginx版本 (初次安装跳过此步骤)

如果nginx已经安装过,执行编译指令:

make

make成功后查看下src下的版本信息,截图带--with-http_ssl_module说明就是带ssl参数编译的

/usr/local/src/nginx-1.18.0/objs/nginx -V


确认编译后的版本无问题后,把上一步make编译后的nginx文件,覆盖指定原版本,输入y确认覆盖完就更新成功了!!

cp /usr/local/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/

七、查看nginx的版本信息

查看安装or更新后的nginx版本,也可以直接nginx -V

/usr/local/nginx/sbin/nginx -V

八、配置开机自启动

vim /lib/systemd/system/nginx.service

复制以下内容保存(按ESC后:wq保存退出)

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

设置开机自启动

systemctl enable nginx

启动、查看状态、重启nginx,指令3件套

systemctl start nginx
systemctl status nginx
systemctl restart nginx

也可以reboot重启机器后再查看nginx状态(验证开机自启动)

九、配置nginx环境变量

一般修改配置后用 nginx -s reload 重启

nginx -s reload

出现以下提示是没有配置环境变量

打开/etc/profile

vim /etc/profile

在最后一行 追加下面2行配置(ESC :wq 保存退出)

# nginx path
PATH=$PATH:/usr/local/nginx/sbin
export PATH

使配置生效后,就可以用nginx -s reload

source /etc/profile

十、默认的nginx配置模板

在nginx默认配置上有一些小调整。

user  nginx;                # nginx启动用户,默认值:nobody
worker_processes  auto;     # nginx进程数,一般设为CPU的核心数,默认值:1

error_log  logs/error.log;  # 错误日志存放路径
#pid        logs/nginx.pid;

events { 
  worker_connections  1024;   # work进程打开的最大连接数
}

http {
    include       mime.types;               # 文件扩展与类型映射
    default_type  application/octet-stream; # 默认的文件类型,不需调整
    # 设置日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;      # 日志文件路径
    charset         utf-8;
    sendfile        on;                     # 开启高速传输模式,默认值:on
    tcp_nopush      on;                     # 减少网络报文段的数量
    tcp_nodelay     on;                     # 作用于socket参数,on=关闭nagle缓存算法,允许小包发送
    keepalive_timeout  65;                  # 超时时间,单位秒

    client_max_body_size    10m;            # 文件大小限制,默认1m

    # gzip相关
    gzip on;                      # 是否开启gzip
    gzip_buffers 32 4K;           # 缓冲(压缩在内存中缓冲几块? 每块多大?)
    gzip_comp_level 6;            # 推荐6压缩级别(级别越高,压的越小,越浪费CPU计算资源)
    gzip_min_length 1k;           # 开始压缩的最小长度
    gzip_types text/plain application/javascript text/css application/xml text/xml;  # 对哪些类型的文件用压缩 如txt,xml,html ,css
    gzip_disable "MSIE [1-6]\.";  # 配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_http_version 1.0;        # 开始压缩的http协议版本开始压缩的http协议版本
    gzip_vary on;                 # 是否传输gzip压缩标志

    #自定义变量
    #set $serverip $server_addr;   # 获取nginx内网ip
    
    # Load modular configuration files
    include conf/*.conf;

    # 默认配置
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        # eror_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    # todo...
}

十一、阿里云SSL证书配置

把阿里云申请的证书放到目录 /data/cert 或者/usr/local/nginx/conf/cert (路径自己指定)
注意:服务器安全组要开启80/443端口

vi  /usr/local/nginx/conf/nginx.conf

增加配置,把下面的www.yuming.com改成自己的域名

    server {
        listen       80;
        server_name  www.yuming.com;
        return       301 https://$server_name$request_uri;
    }
    server {
        listen       443 ssl;   # nginx1.15之后用这个语法,老的语法是ssl on;
        server_name  wwww.yuming.com;
        ssl_certificate   /data/cert/www.yuming.com.pem;
        ssl_certificate_key  /data/cert/www.yuming.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        location / {
            client_max_body_size 12m;  # 设置请求头大小
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8001;
            proxy_redirect off;
        }
    }

十二、腾讯云SSL证书配置

基本和阿里云差不多,在ssl_ciphers处有差异
注意:服务器安全组要开启80/443端口,申请证书的二级域名要和绑定的域名一致,如下例:service,否则会有不安全的警告

    server {
        listen       80;
        server_name  service.yuming.com;
        return       301 https://$server_name$request_uri;
    }
    server {
        listen       443 ssl;  # nginx1.15之后用这个语法,老的语法是ssl on;
        server_name  service.yuming.com;
        ssl_certificate   /data/cert/1_service.yuming.com_bundle.crt;
        ssl_certificate_key  /data/cert/2_service.yuming.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;        
        ssl_prefer_server_ciphers on;
        location / {
            client_max_body_size 12m;  # 设置请求头大小
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8081;
            proxy_redirect off;
        }
    }

十三、Nginx其他配置

1、配置静态文件访问,autoindex on可以设置为开启索引,可自行设置

    server {
        listen       80;
        server_name  pic.yuming.com;
        charset    utf-8;
        location / {
          # 配置静态目录
          root /data/upimgs;
          autoindex off;              # on显示资源目录,off不显示
          autoindex_exact_size off;   # on以bytes显示大小,off以KB、MB、GB显示文件大小
          autoindex_format html;      # 以html的方式进行格式化,可选参数有 html | json | xml
          autoindex_localtime off;    # 显示的⽂件时间为⽂件的服务器时间。默认为off,显示的⽂件时间为GMT时间
        }
    }

2、nginx限制ip访问 + 反向代理

    server {
        listen       80;                    #监听端口
        server_name  api.yuming.com;    #域名
        #自定义变量
        set $serverip $server_addr; # 服务器地址放在变量里,避免重复取

        #allow 61.18.22.155;        # 限制固定ip访问
        #allow 61.18.22.0/24;       # 0/24意思是ip的前3段一致,值范围[8,16,24]
        #deny all;                  # 拒绝所有的
        
        location / {
          root /data/website/goapp/dist;    # 配置静态目录
          index index.html;                 # 配置默认首页
          try_files $uri $uri/ /index.html; # 解决刷新问题
        }
        location /api {
          client_max_body_size 12m;                     #此处修改上传文件大小限制
          proxy_pass http://127.0.0.1:8083;             #反向代理地址+端口

          proxy_set_header Host $http_host;             #设置Host
          proxy_set_header X-Real-Ip $remote_addr;      #设置客户端远程地址
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Server-Ip $serverip;       #设置服务器内网地址
          proxy_set_header X-NginX-Proxy true;		

          # 下面暂时没啥用
          set_real_ip_from 0.0.0.0/0;		            #从哪个信任前代理处获得真实用户ip
          real_ip_header  X-Forwarded-For;   		    #接收到报文的哪个http首部去获取前代理传送的用户ip
          real_ip_recursive   on;             		  #是否递归地排除直至得到用户ip(默认为off)
        }
    }

nginx加websocket配置

      location /ws {
             proxy_http_version 1.1;
             proxy_pass http://localhost:8009;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";          
        }
posted @ 2020-05-28 11:42  nickchou  阅读(5076)  评论(0编辑  收藏  举报