www.js333.com
|
手艺频道
|
51CTO旗下网站
下载金沙国际app
|
|
挪动端
js4399金沙

为 Nginx Web 服务器保驾护航的多少要点

Nginx是环球生长势头最猛的开源轻量级下机能Web服务器体系。Nginx可在Linux、 Windows、Mac OS和Solaris等操作系统上运转。Nginx继承人气激增,意味着愈来愈多的Nginx布置情况需求加以珍爱。

作者:布加迪编译泉源:|2019-03-22 08:39

【51CTO.com快译】Nginx是环球生长势头最猛的开源轻量级下机能Web服务器体系。Nginx可在Linux、 Windows、Mac OS和Solaris等操作系统上运转。Nginx继承人气激增,意味着愈来愈多的Nginx布置情况需求加以珍爱。

我们在本教程中将引见几个常见的Nginx服务器平安要点。

要求

  • 运转Ubuntu 18.04或Debian 9的服务器
  • 您的服务器上已设置了root暗码

1.安装Nginx

起首要把Nginx安装到体系上。运转以下下令去安装它:

  1. apt-get install nginx -y 

一旦Nginx安装终了,能够用以下下令搜检Nginx的状况:

  1. systemctl status nginx 

您应该会看到以下输出:

  1. ?nginx.service - A high performance web server and a reverse proxy server  
  2. Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)  
  3. Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago 
  4.  
  5. Docs: man:nginx(8)  
  6. Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)  
  7. Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)  
  8. Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) 
  9.  
  10. Main PID: 2285 (nginx)  
  11. Tasks: 2 (limit: 1111) 
  12.  
  13. CGroup: /system.slice/nginx.service 
  14.  
  15. ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;  
  16. ??2290 nginx: worker process  
  17. Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...  
  18. Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument  
  19. Mar 10 02:43:14 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server. 

2.更新Nginx

您需求更新Nginx Web服务器体系,由于很多机能上的革新、新的功用和安全补丁在络续增加。大多数当代Linux刊行版不会在默许软件包列表中随带最新版的Nginx。以是您需求经由过程软件包管理器去更新最新版的Nginx。能够用以下下令去更新Nginx Web服务器体系:

  1. apt-get update -y 
  2. apt-get install nginx --reinstall -y 

3.防备信息泄漏

起首需求防备Nginx泄漏其版本信息。

默许状况下,Nginx在HTTP报头中显现其称号和版本。

您能够用以下下令去搜检:

  1. curl -I http://localhost 

应该会看到以下输出:

  1. HTTP/1.1 200 OK 
  2. Server: nginx/1.14.0 (Ubuntu) 
  3. Date: Sat, 09 Mar 2019 15:28:01 GMT 
  4. Content-Type: text/html 
  5. Content-Length: 10918 
  6. Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT 
  7. Connection: keep-alive 
  8. ETag: "5c546e3d-2aa6" 
  9. Accept-Ranges: bytes 

在上述输出中,应该会看到Nginx和操作系统的版本。

能够编纂/etc/nginx/nginx.conf文件,隐蔽那局部信息:

  1. nano /etc/nginx/nginx.conf 

在http设置局部内里增加server_tokens off那一行:

  1. http { 
  2.         ## 
  3.         # Basic Settings 
  4.         ## 
  5.         server_tokens off

完成以后生存并封闭文件。然后重启Nginx Web服务器体系使调换见效:

  1. systemctl restart nginx 

如今再次运转curl下令:

  1. curl -I http://localhost 

应该会看到以下输出:

  1. HTTP/1.1 200 OK 
  2. Server: nginx 
  3. Date: Sat, 09 Mar 2019 15:33:31 GMT 
  4. Content-Type: text/html 
  5. Content-Length: 10918 
  6. Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT 
  7. Connection: keep-alive 
  8. ETag: "5c546e3d-2aa6" 
  9. Accept-Ranges: bytes 

4.限定IP被接见

Nginx随带一个名为ngx_http_access_module的简朴模块,许可或谢绝某个特定的IP地点。

若是你想许可从172.16.0.0/16接见Nginx,但谢绝来自其他子网的接见,那么翻开/etc/nginx/sites-enabled/default文件:

  1. nano /etc/nginx/sites-enabled/default 

在server block内里停止以下变动:

  1. server { 
  2.         listen 80 default_server; 
  3.         listen [::]:80 default_server; 
  4.     allow 172.16.0.0/16; 
  5.         deny  all

完成后生存并封闭文件。然后重启Nginx使这些调换见效:

  1. systemctl restart nginx 

如今,试着从192.168.0.102之类的其他IP地点局限来访问Nginx服务器。

下一步,用以下下令搜检Nginx日记:

  1. tail -f /var/log/nginx/error.log 

您应该会鄙人列输出中看到访问被制止:

  1. 2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122" 

5.用TLS珍爱Nginx

传输层平安(TLS)是平安套接层(SSL)的后续手艺。它供应更壮大更高效的HTTPS,含有更多的革新,好比Forward Secrecy、取当代的OpenSSL暗码组和HSTS。本教程引见如安在Nginx中启用自署名的SSL证书。若是你想改而运用let's Encrypt证书,无妨参阅:https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/。

先用以下下令为SSL建立目次:

  1. mkdir /etc/nginx/ssl/ 

接下来,用以下下令建立密钥和证书:

  1. cd /etc/nginx/ssl/ 

先用以下下令建立密钥:

  1. openssl genrsa -aes256 -out nginx.key 1024 

您会看到以下输出:

  1. Generating RSA private key, 1024 bit long modulus 
  2. ...++++++ 
  3. .............................++++++ 
  4. is 65537 (0x010001) 
  5. Enter pass phrase for nginx.key
  6. Verifying - Enter pass phrase for nginx.key

接下来用以下下令建立csr:

  1. openssl req -new -key nginx.key -out nginx.csr 

供应所有信息,以下所示:

  1. Generating RSA private key, 1024 bit long modulus 
  2. ...++++++ 
  3. .............................++++++ 
  4. is 65537 (0x010001) 
  5. Enter pass phrase for nginx.key
  6. Verifying - Enter pass phrase for nginx.key
  7. root@ubuntu1804:~# openssl req -new -key nginx.key -out nginx.csr 
  8. Enter pass phrase for nginx.key
  9. You are about to be asked to enter information that will be incorporated 
  10. into your certificate request. 
  11. What you are about to enter is what is called a Distinguished Name or a DN. 
  12. There are quite a few fields but you can leave some blank 
  13. For some fields there will be a default value, 
  14. If you enter '.', the field will be left blank. 
  15. ----- 
  16. Country Name (2 letter code) [AU]:IN 
  17. State or Province Name (full name) [Some-State]:Gujarat 
  18. Locality Name (eg, city) []:Junagadh 
  19. Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT 
  20. Organizational Unit Name (eg, section) []:IT 
  21. Common Name (e.g. server FQDN or YOUR name) []:HITESH 
  22. Email Address []:admin@example.com 
  23.  
  24. Please enter the following 'extra' attributes 
  25. to be sent with your certificate request 
  26. A challenge password []:admin 
  27. An optional company name []:IT 

接下来用以下下令署名证书:

  1. openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt 

您会看到以下输出:

  1. Signature ok 
  2. subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = admin@example.com 
  3. Getting Private key 
  4. Enter pass phrase for nginx.key

接下来翻开Nginx默许虚拟主机文件,界说证书:

  1. nano /etc/nginx/sites-enabled/default 

停止以下变动:

  1. server { 
  2.         listen 192.168.0.100:443 ssl; 
  3.         root /var/www/html; 
  4.         index index.html index.htm index.nginx-debian.html; 
  5.         server_name _; 
  6.         ssl_certificate /etc/nginx/ssl/nginx.crt; 
  7.         ssl_certificate_key /etc/nginx/ssl/nginx.key
  8.         ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; 

完成后生存并封闭文件。然后重启Nginx服务器使这些调换见效:

  1. systemctl restart nginx 

6.用密码保护目次

建立Nginx Web服务器时,借能够用暗码去珍爱特定的目次。能够运用.htpasswd文件去做到这一点。

为此用以下下令建立passwd文件,并为它增加用户:

  1. mkdir /etc/nginx/.htpasswd 
  2. htpasswd -c /etc/nginx/.htpasswd/passwd admin 

您会看到以下输出:

  1. New password:  
  2. Re-type new password:  
  3. Adding password for user admin 

接下来用以下下令在Nginx Web root内里建立测试目次。

  1. mkdir /var/www/html/test 

接下来用以下下令为www-data user付与所有权:

  1. chown -R www-data:www-data /var/www/html/test 

接下来用以下下令翻开Nginx默许虚拟主机文件:

  1. nano /etc/nginx/sites-enabled/default 

接下来珍爱测试目次,以下所示:

  1. location /test { 
  2. auth_basic  "Restricted"
  3. auth_basic_user_file   /etc/nginx/.htpasswd/passwd; 

完成后生存并封闭文件。然后重启Nginx服务使这些调换见效:

  1. systemctl restart nginx 

接下来翻开Web浏览器,输入URL http://your-server-ip/test。体系会提醒您输入用户名和暗码,接见测试目次,以下所示:

js4399金沙

恭喜您!您已胜利珍爱了Ubuntu 18.04服务器上的Nginx服务器体系。希望本文可珍爱您放在Nginx Web服务器上的应用程序。念相识更多信息,能够查阅Nginx平安文档(https://docs.nginx.com/nginx/admin-guide/security-controls/)。

原文题目:Tips and Tricks to Secure Your Nginx Web Server,作者:Hitesh Jethva

【51CTO译稿,协作站点转载请说明原文译者和出处为51CTO.com】

【编纂推荐】

【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
  •     
分享:
人人皆在看
猜您喜好

编纂推荐

头条
聚焦
热点
聚焦
存眷
24H热文
一周话题
本月最赞
下载金沙国际app

定阅专栏

优化运维流水线
共3章 | youerning

190人定阅进修

IT人的职场心法
共22章 | Bear_Boss

79人定阅进修

运维标配手艺
共15章 | one叶孤舟

197人定阅进修

视频课程

讲师:17145人进修过

讲师:24579人进修过

讲师:43人进修过

CTO品牌

最新专题

www.6788js.com
精选博文
论坛热帖
下载排行

读 书

本书引见怎样将最盛行的J2EE运用服务器WebLogic Server和最好的Java集成开辟东西JBuilder联合起来开辟J2EE运用,主要内容包孕:WebLogic Se...

定阅51CTO邮刊

51CTO服务号

51CTO播客