百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

Hexo历险记之十Nginx端口转发

connygpt 2024-11-21 13:22 10 浏览

前言

经过前面的文章,你已经成功将本地的文章推送到远程服务器上面了,恭喜你!

接下来,这篇文章会以CentOS系统为例,帮助你安装Nginx,配置端口转发和SSL密钥加密,实现域名加密访问。

时隔四年,重启Hexo历险计划!

Hexo历险记之十Nginx端口转发


至于域名的备案和解析的部分就不整理了,因为阿里云官网上面的指导贴比绝大部分经验贴还要好很多,所以我就不献丑了。

查看状态

查看Nginx的状态,确定当前机器上面是否有Nginx服务。

systemctl status nginx.service

服务正常

查看服务的状态为活跃正常,一般是不需要重新卸载安装的,直接去下面,看配置Nginx就可以了。

image-20220729151038757

查看nginx现在管理的端口

查看nginx master的主进程号

ps aux | grep nginx

image-20210530192407261

这一次主进程号为8806,故而:

netstat -anp | grep 8806

image-20210530192441369

查看 nginx目录

查看 nginx 安装目录

ps -ef | grep nginx

服务异常

查看服务的状态为死亡异常,可以杀死Nginx服务后再重启,一般就会恢复正常。

image-20210530202733234

: 强制杀死服务
pkill -9 nginx
: 重启服务
systemctl start nginx

服务异常且无法恢复

除非是排查无果的情况下,被迫重装Nginx,我才会建议你去安装,因为重装并不能一股脑解决所有问题,还是有可能会卡在原来的老Bug上面。博主甚至被迫重置系统后重新安装才绕过了坑,所以如果原先有可用的Nginx服务,不要轻易卸载重装。

再有,即使你决定要卸载旧的服务,那么有两个地方你也需要备份,一个是原本的编译参数,另一个是原来的配置文件。

: 属性configure arguments后的信息就是编译参数 
nginx -V

nginx

: 查看配置文件所在
nginx -t

而且注意,配置文件不是只有结果命令中的这一个,还有其他的文件,你必须打开这个文件后查看里面是否有include字符。等你找到了所有的配置文件,且完成了备份之后,你就可以去卸载了Nginx服务了。


cd /usr/local
mkdir nginx-back
#在当前文件夹建立nginx-back文件夹
cp -rf nginx/* nginx-back/
#复制nginx文件夹下所有文件到nginx-back文件夹下

卸载Nginx

第一步,停止Nginx服务。

systemctl disable nginx.service

第二步,删除Nginx的开机启动。

chkconfig nginx off

第三步,从文件上删除Nginx

rm -rf /usr/sbin/nginx
rm -rf /etc/nginx
rm -rf /etc/init.d/nginx

最后一步,使用yum清理索引及其他内容。

yum remove nginx

安装Nginx

总共有两种方式来安装Nginx,一种是用包管理器,方便快捷;一种使用离线安装包,步骤繁琐,但好处是可以离线安装,在没有包管理器的情况下也可以安装,而且可以自定义更为美化的索引目录界面。

注意:在安装之前,强烈建议你先运行一遍卸载命令,防止残留的旧服务配置覆盖了新安装的服务配置!

安装-使用包管理器

以CentOS系统为例,使用yum安装Nginx

: 添加源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
: 使用yum安装nginx
yum install -y nginx
: 运行nginx
systemctl start nginx.service

注意:对应的配置文件路径即是/etc/nginx/nginx.conf,日志文件路径为/var/log/nginx

可以使用命令设置开机自启。

systemctl enable nginx.service

这种方式会会自动创建nginx.service文件,所以比源码安装的方式容易一些。

此时用浏览器直接访问IP应该是会出现欢迎界面。

image-20210530203003391

安装-使用源码

下面以2019-08-14更新的1.17.3版本为例,向大家演示如何用源码安装。

下载和解压

从官网上下载下来源码,解压到同名文件夹里面。此时就可以删除下载的安装包或者是留作备份。

: 下载源码
wget http://nginx.org/download/nginx-1.17.3.tar.gz
: 解压到同名文件夹
tar xzf nginx-1.17.3.tar.gz

编译并安装

进入解压好的文件夹,设置编译路径,我是建议编译路径选择长一些的包括SSL协议,除非设置编译路径后无法安装,你再重新设置为不包括SSL的。

: 进入解压的文件夹
cd nginx-1.17.3
: 设置编译路径,无SSL 协议
: ./configure --prefix=/usr/local/nginx 
: 设置编译路径,包括SSL 协议
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
: 编译并安装
make && make install

添加到环境变量

如果认为没有必要,可以在每次调用前给他取一个别名。

: 可以为nginx取别名,类似添加环境变量
alias nginx='/usr/local/nginx/sbin/nginx'

注意:修改/etc/profile配置文件前一定要备份!

修改/etc/profile配置文件,添加PATH内容,保存后一定要重新加载配置文件。

vim /etc/profile

添加内容如下,保存后退出。

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

重新加载配置文件,加载后如果没有报错就是成功了;如果有错就重新加载备份的配置文件,然后重新修改。

source etc/profile

开机自启

由于这次是用源码编译安装的,需要手动创建/lib/systemd/system/nginx.service服务文件。

vim /lib/systemd/system/nginx.service

内容如下,保存后退出。

注意:[Service]的启动、重启、停止命令全部要求使用绝对路径

[Unit] 
Description=nginx 
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
  • Unit:服务的说明
    • Description:描述服务
    • After:描述服务类别
  • Service:服务运行参数的设置
    • Type=forking:是后台运行的形式
    • ExecStart:为服务的具体运行命令
    • ExecReload:为重启命令
    • ExecStop:为停止命令
    • PrivateTmp=True:表示给服务分配独立的临时空间
  • Install:运行级别下服务安装的相关设置
    • WantedBy:设置为多用户,即系统运行级别为3

使用命令运行该服务文件。

systemctl start nginx.service

配置Nginx

接下来,你可以根据自己的情况选择配置加密的Https连接或者是不加密的Http连接。然后就算是出师了,该学会的事情已经都告诉你了,直接访问域名就可以达到这样的效果。

image-20220729172129782

检查配置文件

: 查看nginx版本
nginx -v
: 查看配置文件
nginx -t
: 启动
nginx

默认/etc/nginx/nginx.conf内容如下。

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
    sendfile        on;    
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

注意:一定要在第一行修改使用者为博客目录的拥有者,上一篇新建的用户是keen,所以这里也要改成一样的。

user  keen;

注意:在最后一行标注了会引用/etc/nginx/conf.d目录下所有的conf配置文件,所以接下来向大家展示如何配置Http和Https时,所有的配置文件都是在这个文件夹内的。

配置Http

/etc/nginx/conf.d/建立一个端口文档80.conf,内容如下:

server {
    listen          80;#监听80端口
    server_name     www.clzly.xyz;#域名为这个
    location / {
        root    /home/git/projects/blog;#指向的根目录
        index   index.html index.htm;#指向的目录中的文件
    }
    location /about/ {
        root    /home/git/projects/blog/about/;#指向的根目录
        index   index.html index.htm;#指向的目录中的文件
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
  • listen:监听的端口,默认是监听80端口。
  • server_name:一般是域名www.clzly.xyz,也可以写为本地localhost
  • location:表示匹配的路径
    • root:表示当匹配这个请求的路径时,将会在机器的路径中寻找相应的HTML文件,这对加载静态文件很有用。
    • index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
    • 配置了/表示访问http://www.clzly.xyz/所有请求都被匹配到这里
    • 配置了/about/表示访问http://www.clzly.xyz/about/所有请求都被匹配到这里
    • 配置/50x.html标识访问http://www.clzly.xyz/50x.html所有请求都匹配到这里
  • error_page:是错误页面,暂时不管它。

修改配置文件后不会立刻生效,需要运行下面的命令重新加载配置才行。

nginx -s reload

此时你直接访问域名护着IP就可以看到博客了。

配置Https

上文配置了一个简单的http服务,但是他毕竟是不安全的,明文传输信息很容易被劫持和篡改的。而且重要的是浏览器总会提示该网页不安全,被某同学嬉笑着说建了一个小黄网不安全,我就留心要改变他。

Https比Http多的那一个字母s其实就是加密的意思,而现在比较成熟的加密方法就要用到证书了。生成一个自签名 SSL 证书,是继续下去的基础。

生成SSL-阿里云

由于我的域名是在阿里云注册的,所以SSL也是在阿里云生成的。

控制台搜索关键字ssl

image-20201028141221855

点击购买证书,如图选择免费的加密域名。

image-20201028141356961

支付0元后,回到原先的页面选择证书申请。

image-20201028141458168

填写想要设置的二级域名后,点击下一步,等到他签发成功之后下载即可。

image-20201028141839433

下载的压缩包里就有SSL文件,分别是pemkey文件。

生成SSL-使用freessl

也可以通过freessl,使用的TrustAsia TLS RSA CA颁发给我的证书,中间需要在本地安装一个叫做keymanager的应用。

在阿里云的服务器控制台,上传我的pem和key。

image-20200811150204936

上传成功之后,将证书导出,可以看到两个分别以key和crt为后缀的文件。

新建服务器路径/usr/local/nginx/conf/cert/,并将两个复制到其中。

image-20200811150431736

配置SSL端口转发

当你需要80端口使用加密链接的时候,你可以:

## 参考conf/nginx.conf文件,修改如下内容(此处只是关键需要修改的部分)
http {
    server {
        #   HTTP 和 HTTPS 都使用,如果不使用HTTP则注释掉80端口即可
     listen          80;
  listen              443 ssl;
  ssl_certificate     cert/www.clzly.xyz_chain.crt;
  ssl_certificate_key cert/www.clzly.xyz_key.key;
  server_name     www.clzly.xyz;
    }
}
  • ssl_certificate:用指明crt文件所在路径
  • ssl_certificate_key:用指明key文件所在路径

此时就可以正常使用链接https://www.clzly.xyz/来访问我的博客首页了。

配置Http强制跳转Https

使用语句,那么即使访问不安全的Http也会自动变到安全的Https的链接里去

rewrite ^(.*)nbsp;https://${server_name}$1 permanent;

配置目录索引

可以通过新建配置文件/etc/nginx/conf.d/files.conf,实现页面访问服务器上的文件。

如果是个人使用,建议加上同名的MD5校验值,来让访问的人确定他下载到的文件和你发布的文件是一致的,中间没有被骇客篡改过。

location / {
        root /home/keen/outfile;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        index index.html;
    }

image-20210602201248277

端口绑定失败

如果提示端口绑定失败,那么你可以选择强行关闭Nginx后,重启服务。

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

运行如下命令。

: 强制杀死服务
pkill -9 nginx
: 重新指定配置文件
nginx -c /etc/nginx/nginx.conf
: 重启服务
systemctl start nginx

个人使用配置留档

将我现在使用的几个配置公开留档,方便大家作为参考和借鉴。

server1内容如下。

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  clzly.xyz;
    rewrite ^(.*)nbsp; https://www.clzly.xyz permanent;
}

server2内容如下。

server {
    listen 443 ssl;
    server_name  clzly.xyz www.clzly.xyz;
    ssl_certificate     /etc/nginx/conf.d/cert3/clzly.xyz.pem;
    ssl_certificate_key /etc/nginx/conf.d/cert3/clzly.xyz.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
 location /about/ {
 add_header 'Access-Control-Allow-Origin' $http_origin;
 add_header 'Access-Control-Allow-Credentials' 'true';
 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
 add_header 'Access-Control-Allow-Headers' 'DNT,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        proxy_pass   https://www.yanda.clzly.xyz/;   
 }
    location / {
        root /home/keen/projects/blog;
        index index.html;
    }
    error_page 404 /404.html;
        location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

server3内容如下。

server {
    listen 443 ssl;
    server_name  images.clzly.xyz www.images.clzly.xyz;
    ssl_certificate     /etc/nginx/conf.d/cert3/www.images.clzly.xyz.pem;
    ssl_certificate_key /etc/nginx/conf.d/cert3/www.images.clzly.xyz.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    client_max_body_size 20M;
      location / {
            proxy_pass  https://www.clzly.xyz:1234; # 转发规则
      }
      location ~ .* {
            proxy_pass  https://www.clzly.xyz:1234; # 转发规则
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    error_page 404 /404.html;
        location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

server4内容如下。

 server {
        listen       9001;
        server_name  clzly.xyz www.clzly.xyz;
        location / {
            root /home/keen/withyanda;
            index index.html;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

感激

感谢现在的好奇,为了能成为更好的自己。

Windows下Nginx+Tomcat整合的安装与配置

Nginx配置文件nginx.conf详解

nginx版本升级

Linux-Nginx平滑升级

Linux中nginx基本操作命令

NGINX配置使用HTTPS

如何查看Nginx监听的端口

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...