centos7安装nginx并开启https

建议通读文章后,进行安装

前言

在centos上面安装nginx需要的包比较多,而机器又不能连接互联网,这也是一个很淡疼的点,反反复复搞了两天才弄好,本文提供了所需的所有安装文件包含nginx的安装包。

1.下载所需要的文件

本文写于2019年11月,如过了很久您才看到这个文章,相关软件可能已经进行了大版本的更新,带上你的登云梯去下载吧
链接: https://pan.baidu.com/s/1M_7OE1TfXhJ0or-tm1GjSw 提取码: a4rg
在此处安利一个Linux系统安装包的下载地址 https://centos.pkgs.org/,资源非常nice,不过下载速度感人,是时候用上老司机的登云梯了
此处吐槽一下,好多文章中也带安装文件,但是要会员下载,此处省略一些字~

2.扔到服务器并解压

###比如说扔到了/opt目录下
cd /opt
###解压文件
unzip nginx.zip
###进入文件夹
cd nginx
###安装所有rpm包,别管有啥就是一顿安装
rpm -Uvh *.rpm --nodeps --force

执行安装命令后的提示

Preparing...                          ################################# [100%]
Updating / installing...
   1:zlib-1.2.7-18.el7                ################################# [  4%]
   2:libgcc-4.8.5-39.el7              ################################# [  9%]
   3:libstdc++-4.8.5-39.el7           ################################# [ 13%]
   4:openssl-libs-1:1.0.2k-19.el7     ################################# [ 17%]
   5:libstdc++-devel-4.8.5-39.el7     ################################# [ 22%]
   6:pcre-8.32-17.el7                 ################################# [ 26%]
   7:zlib-devel-1.2.7-18.el7          ################################# [ 30%]
   8:libgomp-4.8.5-39.el7             ################################# [ 35%]
   9:gcc-4.8.5-39.el7                 ################################# [ 39%]
  10:gcc-c++-4.8.5-39.el7             ################################# [ 43%]
  11:openssl-devel-1:1.0.2k-19.el7    ################################# [ 48%]
  12:pcre-devel-8.32-17.el7           ################################# [ 52%]
  13:openssl-1:1.0.2k-19.el7          ################################# [ 57%]
Cleaning up / removing...
  14:gcc-c++-4.8.5-11.el7             ################################# [ 61%]
  15:gcc-4.8.5-11.el7                 ################################# [ 65%]
  16:openssl-1:1.0.1e-60.el7          ################################# [ 70%]
  17:pcre-8.32-15.el7_2.1             ################################# [ 74%]
  18:libstdc++-devel-4.8.5-11.el7     ################################# [ 78%]
  19:libstdc++-4.8.5-11.el7           ################################# [ 83%]
  20:openssl-libs-1:1.0.1e-60.el7     ################################# [ 87%]
  21:zlib-1.2.7-17.el7                ################################# [ 91%]
  22:libgcc-4.8.5-11.el7              ################################# [ 96%]
  23:libgomp-4.8.5-11.el7             ################################# [100%]

3.安装openssl

其实npm包里面已经有openssl了,但不知道为啥安装后没作用,没办法只能再用tar包装一次

###安装到/usr/local下
cd /usr/local
###将文件拷贝过来
cp /opt/nginx/openssl-1.0.2t.tar.gz .
###解压
tar -xvzf openssl-1.0.2t.tar.gz
###进入解压目录
cd openssl-1.0.2t
###检查依赖 没有error就是没问题
./config
###打包 这个时间比较长两分钟多的样子,没有error就是正常接着 install
make
###安装
make install

5.安装nginx

5.1拷贝文件
###安装到/usr/local下
cd /usr/local
###将文件拷贝过来
cp /opt/nginx/nginx-1.16.1.tar.gz .
###解压nginx
tar -zxvf nginx-1.16.1.tar.gz
5.2修改nginx openssl的配置
###进入到openssl配置文件夹
cd nginx-1.16.1/auto/lib/openssl/
###修改conf文件
vi conf
###将39~40行的.penssl去掉
====================================================================================
     39             CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
     40             CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
     41             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
     42             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
====================================================================================
###修改后
     39             CORE_INCS="$CORE_INCS $OPENSSL/include"
     40             CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
     41             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
     42             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
5.3执行安装
###进入nginx目录
cd /usr/local/nginx-1.16.1/
###检查 其中的 /usr/local/ssl 就是上一步openssl的安装目录
./configure --user=root --prefix=/usr/local/nginx --with-openssl=/usr/local/ssl --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module  --with-mail  --with-stream 
###打包 没有error既是成功
make
###安装  没有error既是成功
make install

执行检查后的提示

Configuration summary
  + using system PCRE library
  + using OpenSSL library: /usr/local/ssl
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
5.4启动nginx
###初次启动 进入sbin目录
cd /usr/local/nginx/sbin
###执行
./nginx
###关闭防火墙 也有更优雅的方式,开启端口
systemctl stop firewalld
#开机禁用防火墙
systemctl disable firewalld

##或者使用优雅方式
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

6.启用https

6.1配置证书
  • 购买证书或者下载免费证书
    直接把证书上传到服务器即可,例如/usr/local/openssl_certificate目录下
  • 使用openss生成证书
    文本比较长,往后拉一下

openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt

以下为场景实操
执行命令后需要逐步填写以下内容:国家,省份,城市,公司名称,单位,域名,邮箱

[root@yhwch-int-34 sbin]# openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
Generating a 2048 bit RSA private key
.....................................................................+++
.......................................................................................+++
writing new private key to '/usr/local/ssl/nginx.key'
-----
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) [XX]:CN ##CN代表中国
State or Province Name (full name) []:hebei ##省份
Locality Name (eg, city) [Default City]:shijiazhuang  ##城市
Organization Name (eg, company) [Default Company Ltd]:zhiaiyahong ##公司名称
Organizational Unit Name (eg, section) []:gaojigongchengshi ##单位
Common Name (eg, your name or your servers hostname) []:www.yhwch.com ##域名
Email Address []:[email protected] ##邮箱
[root@yhwch-int-34 sbin]# cd /usr/local/ssl/ ##去目录查看秘钥是否生成
[root@yhwch-int-34 ssl]# ls ##显示文件列表
bin  certs  include  lib  man  misc  nginx.crt  nginx.key  openssl.cnf  private
6.2开启443端口监听
###进入nginx配置目录
cd /usr/local/nginx/nginx.conf
###编辑conf文件
vi nginx.conf

加入以下内容

server {
       listen       443 ssl;
       server_name  localhost;

 #    ssl_certificate      /usr/local/openssl_certificate/yhwch.com_bundle.crt; ##购买的证书
    #    ssl_certificate_key  /usr/local/openssl_certificate/yhwch.com.key;##购买的证书

       ssl_certificate      /usr/local/ssl/nginx.crt; ##证书地址
       ssl_certificate_key  /usr/local/ssl/nginx.key; ##秘钥地址
       
       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;
       access_log /usr/local/nginx/logs/httpsaccess.log; ##日志

       location /yhwch {
            proxy_pass http://0.0.0.0:80;
        }

        location /yhwch/static/{
            alias /opt/yhwch/web/static/;
        }

        location / {
            root   /opt/yhwch/web;
            index  index.html index.htm;
        }
    }

###重启nginx服务
cd /usr/local/nginx/sbin
###重启命令
./nginx -s reload

使用https:ip访问即可 由于是ip访问会提示为不安全的网站,域名的话就会正常

一镜到底

把下面代码中的注释去掉,直接全部复制到系统中执行即可将nginx安装成功,需要将nginx.zip包放到/usr/local目录下

cd /usr/local
#### 解压文件
unzip nginx.zip
#### 安装依赖rpm
cd nginx 
rpm -Uvh *.rpm --nodeps --force
#### 安装openssl
cd /usr/local 
cp /usr/local/nginx/openssl-1.0.2t.tar.gz .
tar -xvzf openssl-1.0.2t.tar.gz
cd openssl-1.0.2t 
./config
make
make install
#### 安装nginx
cd /usr/local 
cp /usr/local/nginx/nginx-1.16.1.tar.gz .
tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/auto/lib/openssl/ 
sed -i "s/\$OPENSSL\/.openssl/\$OPENSSL/g" `grep "$OPENSSL/.openssl" -rl conf`
cd /usr/local/nginx-1.16.1/ 
./configure --user=root --prefix=/usr/local/nginx --with-openssl=/usr/local/ssl --with-http_stub_status_module --with-http_ssl_module
make && make install
/usr/local/nginx/sbin/nginx

附录

  • 参考地址
    Nginx下配置Https证书详细过程
    linux下如何离线安装nginx
  • nginx常用命令,均需要进入 /usr/local/nginx/sbin
    ./nginx 启动nginx,只有在nginx没有启动的情况下可用
    ./nginx -s reload 重启nginx,只有在nginx启动的情况下可用
    ./nginx -s stop 关闭nginx,只有在nginx启动的情况下可用
  • nginx.conf配置
    1.nginx作为前端服务器时,如果前端使用了当下流行的前端框架,可能会出现资源无法加载的情况,这时候是由于静态资源目录未做配置导致资源404,作如下配置 /yhwch/static/是访问网站静态资源时url的目录,/opt/yhwch/web/static/是静态资源的绝对目录
 location / {
          root /opt/progress1;
          index  index.html index.htm;            
          try_files $uri $uri/ /index.html;
     }
 location /yhwch/static/{
            alias /opt/yhwch/web/static/;
        }
##配置二级目录一定要使用 alias属性
location /progress2 {
          alias /opt/progress2;
          index  index.html index.htm;
          try_files $uri $uri/ /progress2/index.html;
 }

2.nginx作为中转服务器
yhwch为需要转发的目录,此处注意转发是直接将路径加到proxy_pass的地址之后如:www.yhwch.com/api/getcode经nginx处理后实际访问的地址为http://0.0.0.0:80/api/getcode

  location /api {
            proxy_pass http://0.0.0.0:80;
        }

3.nginx来回跳~
当你的域名管理不方便是,可能需要配置二级目录做多个nginx的跳转,只能说这种操作挺蛋疼但是没办法
nginx1

       location /next {
            proxy_pass http://0.0.0.2:80;
        }

nginx2 http://0.0.0.2:80

       location /next {
            alias /opt/yhwch/web/static/;
        }

nginx中只能配置在/下配置root,二级目录下面需要配置为alias`

使nginx可以显示目录

    location / {
            root   /var/ftp/pub;
           autoindex on;
           autoindex_exact_size off;
           autoindex_localtime on;
           add_header Cache-Control no-store;
   }

4.日志配置
指定日志目录,并将请求时间记录
$request_time 时间指的是从接受请求到数据完全返回的时间,个人理解为完整的请求时间
$upstream_response_time时间指创建连接到关闭连接,此时间小于request_time

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time" "$request_time"';
##末尾的main必须指定否则仍旧使用的是默认日志方式
access_log  /opt/ylbzj/logs/access.log main;

5.nginx代理邮件服务器
假设要代理腾讯的smtp服务,直接在conf文件末尾加上这个配置,邮件发送地址换成nginx的地址即可
编译的时候一定要带上这两个指令 --with-mail --with-stream

stream{

    server{
        listen       465;
        proxy_pass smtp.qq.com:465;
        }
}

6.更多功能待补充~
目前只用到了转发以及静态资源的配置,nginx还可做负载均衡,由于公司在nginx上层做了硬负载所以就没用这个功能~
Happy Ending ~ 祝各位安装顺利

你可能感兴趣的:(centos7安装nginx并开启https)