一、服务器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]