Nginx安装及创建安全高效的应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要是基于Mac环境安装及使用nginx,供大家学习。


一、Nginx是什么?

Nginx 是一个高性能的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现最好,国内使用nginx网站用户有:百度、京东、新浪、网易、 腾讯、淘宝等。

官方网站:http://nginx.org/

Nginx使用情况
在这里插入图片描述

二、使用步骤

本次安装没有简单的使用brew安装,而是通过通过下载压缩包,编译,安装部署。

1.安装部署

nginx依赖以下模块:

  • gzip模块需要 zlib 库(本地依赖系统 免安装)
  • rewrite模块需要 pcre 库
  • ssl 功能需要openssl库

1.1pcre安装

cd /Users/valley/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35

./configure 
make &&make install

pcre-config --version

1.2openssl安装

cd /Users/valley/
wget https://www.openssl.org/source/openssl-3.0.3.tar.gz
tar zxvf openssl-3.0.3.tar.gz
cd openssl-3.0.3
./config
make &&make install

openssl version

1.3Nginx安装

cd /Users/valley/
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2

./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre=/Users/valley/pcre-8.35 --prefix=/Users/valley/webserver/nginx --with-openssl=/Users/valley/openssl-3.0.3 

make &&make install
  • configure成功显示如下
Configuration summary
  + using PCRE library: /Users/valley/pcre-8.35
  + using OpenSSL library: /Users/valley/openssl-3.0.3
  + using system zlib library

  nginx path prefix: "/Users/valley/webserver/nginx"
  nginx binary file: "/Users/valley/webserver/nginx/sbin/nginx"
  nginx modules path: "/Users/valley/webserver/nginx/modules"
  nginx configuration prefix: "/Users/valley/webserver/nginx/conf"
  nginx configuration file: "/Users/valley/webserver/nginx/conf/nginx.conf"
  nginx pid file: "/Users/valley/webserver/nginx/logs/nginx.pid"
  nginx error log file: "/Users/valley/webserver/nginx/logs/error.log"
  nginx http access log file: "/Users/valley/webserver/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"
  • 查看nginx版本
(base) valley@valleyMacBook-Pro ~ % ~/webserver/nginx/sbin/nginx -v
nginx version: nginx/1.20.2
  • 检查配置文件nginx.conf的正确性命令
(base) valley@valleyMacBook-Pro ~ % ~/webserver/nginx/sbin/nginx -t
nginx: the configuration file /Users/valley/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /Users/valley/webserver/nginx/conf/nginx.conf test is successful
  • Nginx 启动命令如下
~/webserver/nginx/sbin/nginx

启动nginx之后,浏览器中输入http://localhost可以验证是否安装启动成功。

在这里插入图片描述
其他命令

/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx

2.添加模块

默认情况下不构建的模块,应使用配置参数启用它,如 --with-http_geoip_module 。

官方模块访问地址
http://nginx.org/en/docs/

3.代理

3.1反向代理

要实现网盘安全稳定运行,我们还需要在网盘前端构建一个反向代理服务器,通过nginx屏蔽网盘系统 直接暴露在网上,最大限度保障网盘安全。可见,反向代理保障了服务器的安全。

在这里插入图片描述

3.2正向代理

正向代理是从客户端的角度出发,服务于特定用户,比如说一个局域网内的客户,以访问非特定的服务,例如当你用浏 览器访问国外的网站(谷歌),被拒绝无法访问时,你可以在国外搭建一个代理服务器,这样就可以正常访问了。 正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。而反向代理隐 藏的是服务器。

在这里插入图片描述

location / { 
proxy_pass http://localhost:8080; 
proxy_set_header Host $proxy_host; 
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

这段内容实现的就是反向代理功能.

4.负载均衡

负载均衡的配置和负载均衡策略相关。

  • 轮询(默认)
    轮询方式是 Nginx 负载均衡默认的方式。顾名思义,所有请求都按照时间顺序分配到不同的服务上。如果某个服务器 Down 掉,可以自动将该服务器剔除,不再分发请求到该服务器上。

我们上面的配置就是使用的默认即轮询策略进行分发:

upstream myServerSetting {
server 192.168.32.128:8080;
server 192.168.32.129:8080;
}

  • 权重(weight)
    可以用 weight 关键字来指定每个服务器的权重比例,默认权重为 1,weight和访问比率成正比,权重越高被分发到的请求越多。通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。

如下配置后10002服务的访问比率会是10001服务的二倍:

upstream dalaoyang-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}

  • ip_hash(一个客户端访问固定服务器)
    每个请求都根据访问 ip 的 hash 结果分配,经过这样的处理,每个访客固定访问一个后端服务,可以解决 session 的问题。

如下配置(ip_hash 可以和 weight 配合使用)。

upstream dalaoyang-server {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}

  • fair(服务器响应快的优先分配)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream dalaoyang-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
fair;
}

注意:upstream后面不要加_命名。

5.HTTPS加密传输

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。 HTTPS是以安全为目标的HTTP通道,HTTPS协议是利用SSL+HTTP协议建立安全信道, 加密数据包,提供身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别:

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,前者默认端口80,后者默认端口443。
  • 使用https协议需要申请证书,证书有收费和免费的。

我们可以在阿里云申请一个免费的ssl证书,然后将证书绑定到我们服务器的nginx上,即可实现数据加密传输。

获取证书之后,将证书绑定到我们服务器的nginx配置上即可,在nginx上配置ssl证书,需要在nginx.conf中添加一 个server段

server { 
	listen 443 ssl; 
	server_name www.sample.com;
	ssl_certificate sample/sample.pem;
	ssl_certificate_key sample/sample.key; ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers "HIGH:!aNULL:!MD5";
	add_header X-Frame-Options DENY;
	add_header X-Content-Type-Options nosniff;
	add_header X-Xss-Protection 1;
	location / { 
		proxy_pass http://localhost:8080;
		proxy_set_header Host $proxy_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

总结

配置文件如下:

#user  nobody;
worker_processes 4;
error_log  /Users/valley/webserver/nginx/logs/error.log  crit;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid  /Users/valley/webserver/nginx/logs/nginx.pid;

worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  10240;
}


http {
    include       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"';
    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  logs/access.log  main;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 200m;
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 60;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip on; 
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
	    {
	      expires 30d;
	    }
	    location ~ .*\.(js|css)?$
	    {
	      expires 15d;
	   	  # access_log off;
	    }
	    access_log off;
    
    }

    server { 
		listen 443 ssl; 
		server_name www.sample.com;
		ssl_certificate sample/sample.pem;
		ssl_certificate_key sample/sample.key; ssl_prefer_server_ciphers on;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_ciphers "HIGH:!aNULL:!MD5";
		add_header X-Frame-Options DENY;
		add_header X-Content-Type-Options nosniff;
		add_header X-Xss-Protection 1;
		location / { 
			proxy_pass http://localhost:8080;
			proxy_set_header Host $proxy_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

blackoon88

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

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

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

打赏作者

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

抵扣说明:

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

余额充值