服务器Ubuntu18.06下安装nginx-1.23.3的过程、Nginx的SSL证书使用密码生成的命令以及nginx监听端口6000后的ERR_UNSAFE_PORT问题

一、服务器Ubuntu18.06下安装nginx-1.23.3

        因为很长时间以来,一直使用docker,所以很久没有在服务器下直接安装过nginx,但这次因为https的事情,需要直接在系统中安装nginx,找来最新版的nginx1.23.3。并且需要支持https,我这里使用的是服务器Ubuntu18.06,安装记录如下:

        Nginx模块依赖性在安装之前需要先装一些支持模块,先进行一些初始化模块安装如下:

1.gzip 模块需要 zlib 库.zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf中配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,则在编译时就必须把zlib编译进Nginx。

2.rewrite 模块需要 pcre 库.PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块需要靠它来解析正则表达式。

3.ssl 功能需要 openssl 库.如果服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么需要拥有OpenSSL。

apt-get -y install make gcc openssl libssl-dev build-essential unzip
apt-get -y install libpcre3 libpcre3-dev libpcrecpp0v5  zlib1g-dev

wget http://nginx.org/download/nginx-1.23.3.tar.gz
mkdir /opt/nginx_system/
./configure --user=www --group=www --prefix=/opt/nginx_system/ --with-http_stub_status_module --with-http_ssl_module --with-http_perl_module --with-debug

在make的时候遇到报错:

/usr/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
objs/Makefile:242: recipe for target 'objs/nginx' failed
make[1]: *** [objs/nginx] Error 1
make[1]: Leaving directory '/opt/downloads/nginx-1.23.3'
Makefile:10: recipe for target 'build' failed
make: *** [build] Error 2

因为在configure的时候指定了要安装--with-http_perl_module模块,解决方法:

wget https://www.cpan.org/src/5.0/perl-5.28.2.tar.gz
tar -xzf perl-5.28.2.tar.gz
cd perl-5.28.2
./Configure -des
make; make install

二、Nginx的SSL证书使用密码生成的命令 

        证书过期,公司给了一个证书压缩包,里面有cer,crt,jks,key,p12,pem,pfx,_CA.crt,_noCA.crt这些格式的文件,也不给个使用的说明文档比如openssl命令的使用,谁能记得啊,又得去网上搜索尝试。实际在压缩包里附带一个 openssl命令生成的步骤说明一下就好了,不然所有拿到压缩包的人都得去网上搜索一遍,不过换个想法想想,也行吧,复习一下使用方法。

        如果直接在nginx的配置文件里使用:

ssl_certificate      ####.crt; 
ssl_certificate_key  ####.key;

会报错 bad password read,详细报错如下:

nginx: [emerg] cannot load certificate key "/etc/nginx/###.com.key": PEM_read_bio_PrivateKey() faile (SSL: error:2807106B:UI routines:UI_process:processing error:while reading strings error:0906406D:Proutines:PEM_def_callback:problems getting password error:0906A068:PEM routines:PEM_do_header:bad password read)

        这是因为默认的方式是在 nginx 启动重启的时候输入证书密码,但这也太麻烦了,可以使用私钥来生成解密后的 key 来代替,一般也都是这样处理。不然在nginx -t检查的时候就会让你输入  Enter PEM pass phrase: 来进行验证。通过生成解密后的key来实现免密码启动和重启nginx。

        使用如下命令,将 linge.####.key 换成你的二级域名确认后输入 密码 即可生成 linge.####.key 文件,替换到ssl_certificate_key里即可,也可以直接将密码写在命令里,使用pass:选项,如下:

# 确认后输入密码生成文件
openssl rsa -in ####.key -out linge.####.key
# 直接在命令行中写上命令 csdn 生成key
openssl rsa -in csdn.com.key -passin pass:csdn -out linge.csdn.com.key  

三、nginx监听端口6000后的ERR_UNSAFE_PORT问题-nginx正常浏览器访问不了 

        在服务器上使用docker启动了nginx,由于端口限制,我使用了6000端口映射里面的80端口,启动成功后开始我使用microSoft Edga浏览器打开,发现竟然打不开,查看nginx的日志却发现请求根本没有发到nginx服务器上,但查看服务器上已经正常启动nginx并且在监听6000端口。挺奇怪的,之后我在服务器使用localhost以及IP加端口发现均能正常访问nginx。

        问题出在哪呢?于是我在本地换了一个老版本的IE浏览器,这回发现竟然能成功,那到底是不是Edga太垃圾啊?好吧,网上对Edga确实评价不好,本来我还打算后面多用点edga呢,因为电脑上不能装太多软件,于是准备下载个google浏览器(之前实际已经安装了,但觉得用不上有个edga就行就卸载了,真是折腾)。公司严格限制直接请求外网,所以下载google浏览器还得折腾,因为默认chrome官网下载的都是在线安装版本,需要连外网下载软件安装。所以这种版本根本没法用。

        IE可以 edga浏览器报失败。Google Chrome如何下载离线安装版。Chrome浏览器官网地址:Google Chrome 网络浏览器
离线下载版请求地址:Google Chrome 网络浏览器,参数中的platform就是平台,standalone指离线安装包,这里下载的是64位版。最后得到的就是 Google Chrome 64位windows离线安装包,用mac替换win,就可以下载Mac版本。

        但安装好之后发现chrome浏览器也中风了,打开也是一样报错:网址为 **.** 的网页可能暂时无法连接,或者它已永久性地移动到了新网址,发现下面有一个错误码:ERR_UNSAFE_PORT,了解了一下发现这是浏览器认为不安全的端口导致的,google chrome自定义了一套默认非安全端口列表,真是操蛋啊,原来是浏览器自己当家做主了。看来冤枉Edga了,应该是同样的策略。要么修改nginx监听端口,要么就只能改造浏览器了。我们要让chrome允许访问非常规端口,右击Google Chrome 快捷方式,选择属性,在目标对应文本框添加端口允许,最终如下:这样就可以让浏览器访问6001,6000,6666端口。

"C:\Program Files\Google\Chrome\Application\chrome.exe" --explicitly-allowed-ports=6001,6000,6666

        附:Google Chrome 默认非安全端口列表,虽然以上方法可以解决问题,但建议尽量避免以下端口: 

端口号 备注
1,    #tcpmux
7,    #echo
9,    #discard
11,   #systat
13,   #daytime
15,   #netstat
17,   #qotd
19,   #chargen
20,   #ftp data
21,   #ftp access
22,   #ssh
23,   #telnet
25,   #smtp
37,   #time
42,   #name
43,   #nicname
53,   #domain
77,   #priv-rjs
79,   #finger
87,   #ttylink
95,   #supdup
101,  #hostriame
102,  #iso-tsap
103,  #gppitnp
104,  #acr-nema
109,  #pop2
110,  #pop3
111,  #sunrpc
113,  #auth
115,  #sftp
117,  #uucp-path
119,  #nntp
123,  #NTP
135,  #loc-srv /epmap
139,  #netbios
143,  #imap2
179,  #BGP
389,  #ldap
465,  #smtp+ssl
512,  #print / exec
513,  #login
514,  #shell
515,  #printer
526,  #tempo
530,  #courier
531,  #chat
532,  #netnews
540,  #uucp
556,  #remotefs
563,  #nntp+ssl
587,  #stmp?
601,  #??
636,  #ldap+ssl
993,  #ldap+ssl
995,  #pop3+ssl
2049, #nfs
3659, #apple-sasl / PasswordServer
4045, #lockd
6000, #X11
6665, #Alternate IRC [Apple addition]
6666, #Alternate IRC [Apple addition]
6667, #Standard IRC [Apple addition]
6668, #Alternate IRC [Apple addition]
6669, #Alternate IRC [Apple addition]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值