提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本文主要是基于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;
}
}
}