Nginx安装及常用优化和配置

Nginx编译安装

安装工具和库

yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

# PCRE是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式

# zlib库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip

cd /home

下载Nginx

wget http://nginx.org/download/nginx-1.25.0.tar.gz 

解压

tar -zxvf nginx-1.25.0.tar.gz && cd nginx-1.25.0

安装模块(ssl、stream)

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_sub_module --with-http_gzip_static_module --with-pcre --with-stream

注:nginx第三方模块安装方法 ./configure --prefix=/你的安装目录 --with-模块名

#–prefix 指定安装路径

#–with-http_stub_status_module 允许查看nginx状态的模块

# --with-http_ssl_module 支持https的模块

编译并安装

make && make install

nginx配置文件目录

/usr/local/nginx/conf

配置

/usr/local/nginx/conf/nginx.conf

# 创建用户和用户组
#user  nobody;

# 开启2个工作进程(2 核 CPU,至少应该为 CPU 的每一个核分配一个工作进程)
worker_processes 2;
# worker_processes  auto;

# worker 进程会在一个适当的优先级启动。值的范围为 -20(优先级最高)~19(优先权最低),设置的值不应该低于-5,因为它是内核进程的默认优先级     
worker_priority 0;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 指定nginx进程运行文件存放地址
# pid        /var/run/nginx.pid;


events {
	# 设置网路连接序列化,防止惊群现象发生,默认为on
	accept_mutex 	on;  
	# 设置一个进程是否同时接受多个网络连接,默认为off	
    multi_accept 	on;
	# 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
	#use epoll;    
	# 最大连接数,默认为512	
    worker_connections 1024;
}

# 为了让这个配置文件简单一些,将配置stream放入到include /usr/local/nginx/conf/conf.d/,并以.stream做后缀名。
# 需要为每个端口创建一个.stream做后缀名的配置文件
include /usr/local/nginx/conf/conf.d/*.stream;


http {
	# 文件扩展名与文件类型映射表
    include       /usr/local/nginx/conf/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"';

    #access_log  /var/log/nginx/access.log  main;
	
	# 开启高效文件传输模式
	# 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
	sendfile 		on;
	
	# 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。	
	#sendfile_max_chunk 100k;  
	
	# 减少网络报文段数量
    #tcp_nopush on;
    # 提高I/O性能
    tcp_nodelay on;
	
	# 连接超时时间,默认为75s,可以在http,server,location块。
	#keepalive_timeout  0;
    keepalive_timeout  65;
	
	#gzip  on;
	
	# 负载均衡
	#upstream mysvr {   
	#	server 127.0.0.1:7878;
	#	server 192.168.10.121:3333 backup;  #热备
    #}
	
	# 隐藏Nginx版本号
	server_tokens off;
	
	#该属性默认为off,表示如果header name中包含下划线,则忽略掉。
	underscores_in_headers on;
	
	# 设置请求体大小
	client_max_body_size 100m;

    include /usr/local/nginx/conf/conf.d/*.conf;
}

反向代理

普通端口

server {
	# 监听端口(443端口开启ssl)
    listen       18443;
    # 监听地址(IP地址)
    server_name  100.10.150.200;
    # 监听地址(域名、需提前配置DNS解析)
    # server_name  www.melf.top;
 
 	# 反向代理
	location / {
		proxy_pass https://www.baidu.com/;
	}	
}

注:项目开发过程中,若第三方提供的接口有IP白名单,可以使用此方式进行中转(将服务器IP加入白名单、并在服务器进行转发配置)

开启ssl

server {
	# 监听端口(443端口开启ssl)
	# listen 				443 ssl http2;
	# listen 				[::]:443 ssl http2;
	
	# 非443端口开启ssl
	listen 				442 ssl;
	listen 				[::]:442 ssl;
	# 监听地址
	server_name www.melf.top;
	
	# 开启HTTPS
	#ssl 				on;
	
	# ssl证书地址
	# 配置nginx ssl证书的路径
	ssl_certificate /usr/local/nginx/conf/cert/www.melf.top.pem;
	ssl_certificate_key /usr/local/nginx/conf/cert/www.melf.top.key;
	# 指定客户端建立连接时使用的ssl协议版本,如果不需要兼容TSLv1,直接去掉即可
	ssl_protocols       	TLSv1 TLSv1.1 TLSv1.2;
	# 指定客户端连接时所使用的加密算法,你可以再这里配置更高安全的算法
	ssl_ciphers         	HIGH:!aNULL:!MD5;

	# 激活会话重续提高https性能
	ssl_session_cache 			shared:SSL:50m;
	ssl_session_timeout 		5m;
	ssl_session_tickets 		off;

	# 激活服务器端保护免于BEAST攻击
	ssl_prefer_server_ciphers 	on;

	# 减少点击劫持
	add_header 				X-Frame-Options 		DENY;
	
	# 禁止服务器自动解析资源类型(失效某些浏览器的内容类型探嗅)
	# 此配置开启会造成高德地图数据失效!!!
	#add_header 				X-Content-Type-Options 	nosniff;
	
	#防XSS攻击
	add_header 				X-Xss-Protection 		1; 
	
	# 路由跳转
	location / {
		rewrite ^/ https://guide.melf.space/MELF/;
	}	
	

	access_log  /var/log/nginx/www.melf.top.log;
	error_log  /var/log/nginx/www.melf.top.error.log;
}

实例

server {
	# 监听端口
	listen 				443 ssl http2;
	listen 				[::]:443 ssl http2;
	# 监听地址
	server_name 需要监听的域名;
	
	# 开启HTTPS
	#ssl 				on;
	
	# ssl证书地址
	# 配置nginx ssl证书的路径
	ssl_certificate /etc/nginx/cert/需要监听的域名.pem;
	ssl_certificate_key /etc/nginx/cert/需要监听的域名.key;
	# 指定客户端建立连接时使用的ssl协议版本,如果不需要兼容TSLv1,直接去掉即可
	ssl_protocols       	TLSv1 TLSv1.1 TLSv1.2;
	# 指定客户端连接时所使用的加密算法,你可以再这里配置更高安全的算法
	ssl_ciphers         	HIGH:!aNULL:!MD5;

	# 激活会话重续提高https性能
	ssl_session_cache 			shared:SSL:50m;
	ssl_session_timeout 		5m;
	ssl_session_tickets 		off;

	# 激活服务器端保护免于BEAST攻击
	ssl_prefer_server_ciphers 	on;

	# 减少点击劫持
	add_header 				X-Frame-Options 		DENY;
	
	# 禁止服务器自动解析资源类型(失效某些浏览器的内容类型探嗅)
	# 此配置开启会造成高德地图数据失效!!!
	#add_header 				X-Content-Type-Options 	nosniff;
	
	#防XSS攻击
	add_header 				X-Xss-Protection 		1; 
	
	# 配置404
	error_page   404  /404;

	
	# 前端
	location / {
		root 			/home/bus-pos/web/bus_pos_web/;
		index 			index.html index.htm;
		try_files 		$uri $uri/ /index.html;
	}
	

	# 前端
	#location / {
	#	alias /home/bus-pos/web/bus_pos_web/;
	#}
	
	# 地图服务
	location /_AMapService/maps {
		set $args "$args&jscode=高德地图秘钥";
        proxy_pass https://webapi.amap.com/maps;
    }
	
	# 自定义地图服务代理
	location /_AMapService/v4/map/styles {
		set $args "$args&jscode=高德地图秘钥";
		proxy_pass https://webapi.amap.com/v4/map/styles;
	}
	
	# 海外地图服务代理
	location /_AMapService/v3/vectormap {
		set $args "$args&jscode=高德地图秘钥";
		proxy_pass https://fmap01.amap.com/v3/vectormap;
	}
	
	# Web服务API 代理
	location /_AMapService/ {
		set $args "$args&jscode=高德地图秘钥";
		proxy_pass https://restapi.amap.com/;
	}
	
	# 基础服务
	location /sys_auth/{
		proxy_pass http://127.0.0.1:1000/sys_auth/;
		# 保留代理之前的host
		# proxy_set_header    Host             $host;
		proxy_set_header    Host             $host:$server_port;
		# 保留代理之前的真实客户端ip
		proxy_set_header    X-Real-IP        $remote_addr;
		proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
		# 在多级代理的情况下,记录每次代理之前的客户端真实ip
		proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
		# 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
		proxy_redirect      default;
	}
	
	# 业务
	location /manage/{
		proxy_pass http://127.0.0.1:1000/manage/;
		# 保留代理之前的host
		# proxy_set_header    Host             $host;
		proxy_set_header    Host             $host:$server_port;
		# 保留代理之前的真实客户端ip
		proxy_set_header    X-Real-IP        $remote_addr;
		proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
		# 在多级代理的情况下,记录每次代理之前的客户端真实ip
		proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
		# 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
		proxy_redirect      default;
	}
	
	access_log  /var/log/nginx/需要监听的域名.log;
	error_log  /var/log/nginx/需要监听的域名.error.log;
}

TCP/UDP转发

#stream模块和http模块是并列级别的,所以stream要写在http{}外边
stream {
	# 负载均衡
	upstream back{
		server 10.112.9.15:8866;
	}
	server {
	    # 添加7000端口的stream代理配置
		listen 8866;
		proxy_connect_timeout 5s;
		proxy_timeout 300s;
		# 配置代理
		proxy_pass back;
	}
}

文件服务器

location /download/{
	root /home/fs;
	autoindex on; # 索引 
	autoindex_exact_size on; # 显示文件大小 
	autoindex_localtime on; # 显示文件时间 
}

SSE(Server-Sent Events)

# SSE
location /jingxi_sse/{
    proxy_pass http://127.0.0.1:9001/jingxi_sse/;

    # 允许 所有头部 所有域 所有方法
    #	add_header 'Access-Control-Allow-Origin' '*';
    #	add_header 'Access-Control-Allow-Headers' '*';
    #	add_header 'Access-Control-Allow-Methods' '*';

	# 设置http版本为1.1
    proxy_http_version 1.1;                         
    # 机制:转发请求头为空字符串,不会透传;由于HTTP/1.1不指定Connection,默认是keepalive长连接
    # 设置Connection为长连接
    proxy_set_header Connection "";                

    # 控制是否打开后端响应内容的缓冲区,如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。
    proxy_buffering off;

	# off参数可以屏蔽从上层配置继承的缓存功能
    proxy_cache off;

    chunked_transfer_encoding off;

    proxy_redirect off;

    # proxy_buffer_size 1024k;
    # proxy_buffers 16 1024k;
    # proxy_busy_buffers_size 2048k;
    # proxy_temp_file_write_size 2048k;
}

Websocket

location /jingxi_ws/ {
    proxy_pass http://127.0.0.1:1000/ws/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

负载均衡

轮询

# 代理服务器
# 设置服务器组
upstream fuzai {
	server 10.226.115.178:9002;
	server 10.226.115.179:9002;
	server 10.226.115.180:9002;
	server 10.226.115.181:9002;
}

加权轮询

# 代理服务器
# 设置服务器组
upstream fuzai {
	server 10.226.115.178:9002 weight=4;
	server 10.226.115.179:9002 weight=2;
	server 10.226.115.180:9002 weight=2;
	server 10.226.115.181:9002 weight=2;
}

ip_hash

# 代理服务器
# 设置服务器组
upstream fuzai {
	ip_hash;
	server 10.226.115.178:9002;
	server 10.226.115.179:9002;
	server 10.226.115.180:9002;
	server 10.226.115.181:9002;
}

least_conn(最少连接)

# 代理服务器
# 设置服务器组
upstream fuzai {
	least_conn;
	server 10.226.115.178:9002;
	server 10.226.115.179:9002;
	server 10.226.115.180:9002;
	server 10.226.115.181:9002;
}

url_hash

# 代理服务器
# 设置服务器组
upstream fuzai {
	hash $request_uri;
	server 10.226.115.178:9002;
	server 10.226.115.179:9002;
	server 10.226.115.180:9002;
	server 10.226.115.181:9002;
}

其他配置

server {
	# 监听端口
	listen 				443 ssl http2;
	listen 				[::]:443 ssl http2;
	# 监听地址
	server_name 需要监听的域名;
	
	# 开启HTTPS
	#ssl 				on;
	
	# ssl证书地址
	# 配置nginx ssl证书的路径
	ssl_certificate /etc/nginx/cert/需要监听的域名.pem;
	ssl_certificate_key /etc/nginx/cert/需要监听的域名.key;
	# 指定客户端建立连接时使用的ssl协议版本,如果不需要兼容TSLv1,直接去掉即可
	ssl_protocols       	TLSv1 TLSv1.1 TLSv1.2;
	# 指定客户端连接时所使用的加密算法,你可以再这里配置更高安全的算法
	ssl_ciphers         	HIGH:!aNULL:!MD5;

	# 激活会话重续提高https性能
	ssl_session_cache 			shared:SSL:50m;
	ssl_session_timeout 		5m;
	ssl_session_tickets 		off;

	# 激活服务器端保护免于BEAST攻击
	ssl_prefer_server_ciphers 	on;

	# 减少点击劫持
	add_header 				X-Frame-Options 		DENY;
	
	# 禁止服务器自动解析资源类型(失效某些浏览器的内容类型探嗅)
	# 此配置开启会造成高德地图数据失效!!!
	#add_header 				X-Content-Type-Options 	nosniff;
	
	#防XSS攻击
	add_header 				X-Xss-Protection 		1; 
	
	# 配置404
	error_page   404  /404;

	# 基础服务
	location /{
		proxy_pass http://fuzai/;
		# 保留代理之前的host
		# proxy_set_header    Host             $host;
		proxy_set_header    Host             $host:$server_port;
		# 保留代理之前的真实客户端ip
		proxy_set_header    X-Real-IP        $remote_addr;
		proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
		# 在多级代理的情况下,记录每次代理之前的客户端真实ip
		proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
		# 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
		proxy_redirect      default;
	}
	
	access_log  /var/log/nginx/需要监听的域名.log access;
	error_log  /var/log/nginx/需要监听的域名.error.log;
}

Log格式

log_format access escape=json '{ "@timestamp": "$time_iso8601″, '
'"remote_addr": "$remote_addr",'
'"costime": "$request_time",'
'"realtime": "$upstream_response_time",'
'"status": $status,'
'"x_forwarded": "$http_x_forwarded_for",'
'"referer": "$http_referer",'
'"request": "$request",'
'"upstr_addr": "$upstream_addr",'
'"bytes":$body_bytes_sent,'
'"dm":$request_body,'
'"agent": "$http_user_agent" }';
server {
	# 监听端口
	listen 				443 ssl http2;
	listen 				[::]:443 ssl http2;
	# 监听地址
	server_name 需要监听的域名;
	
	# 开启HTTPS
	#ssl 				on;
	
	# ssl证书地址
	# 配置nginx ssl证书的路径
	ssl_certificate /etc/nginx/cert/需要监听的域名.pem;
	ssl_certificate_key /etc/nginx/cert/需要监听的域名.key;
	# 指定客户端建立连接时使用的ssl协议版本,如果不需要兼容TSLv1,直接去掉即可
	ssl_protocols       	TLSv1 TLSv1.1 TLSv1.2;
	# 指定客户端连接时所使用的加密算法,你可以再这里配置更高安全的算法
	ssl_ciphers         	HIGH:!aNULL:!MD5;

	# 激活会话重续提高https性能
	ssl_session_cache 			shared:SSL:50m;
	ssl_session_timeout 		5m;
	ssl_session_tickets 		off;

	# 激活服务器端保护免于BEAST攻击
	ssl_prefer_server_ciphers 	on;

	# 减少点击劫持
	add_header 				X-Frame-Options 		DENY;
	
	# 禁止服务器自动解析资源类型(失效某些浏览器的内容类型探嗅)
	# 此配置开启会造成高德地图数据失效!!!
	#add_header 				X-Content-Type-Options 	nosniff;
	
	#防XSS攻击
	add_header 				X-Xss-Protection 		1; 
	
	# 配置404
	error_page   404  /404;

	# 基础服务
	location /{
		proxy_pass http://127.0.0.1:1000/;
		# 保留代理之前的host
		# proxy_set_header    Host             $host;
		proxy_set_header    Host             $host:$server_port;
		# 保留代理之前的真实客户端ip
		proxy_set_header    X-Real-IP        $remote_addr;
		proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
		# 在多级代理的情况下,记录每次代理之前的客户端真实ip
		proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
		# 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
		proxy_redirect      default;
	}
	
	access_log  /var/log/nginx/需要监听的域名.log access;
	error_log  /var/log/nginx/需要监听的域名.error.log;
}

开机自启

/etc/systemd/system/ 文件夹下创建一个启动脚本 nginx.service

touch nginx.service
chmod 755 nginx.service

设置内容

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -g "daemon on; master_process on;"
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后执行

systemctl daemon-reload
systemctl enable nginx

Failed to execute operation: File exists

find / -name nginx.service

需要把多余的文件删除就可以了:

rm -rf 多余的文件或符号链接
systemctl enable nginx

nginx 启动

systemctl start nginx

nginx 停止

systemctl stop nginx

验证是否开机自启

reboot 

随后开始设置开机自启,编辑etc文件

/etc/rc.d/rc.local

在最后一行加入nginx对应的路径,保存退出

/usr/local/nginx/sbin/nginx

设置完毕后需要给文件添加可执行权限,添加后可看到字体变绿

chmod +x /etc/rc.d/rc.local

使用reboot重启

reboot

使用 ps -ef 检查是否成功开机自启。如图显示自启成功

ps -ef | grep nginx

常用命令

启动 Nginx

/usr/local/nginx/sbin/nginx

检测 Nginx 配置是否正确

/usr/local/nginx/sbin/nginx -t

重新载入 Nginx 配置

/usr/local/nginx/sbin/nginx -s reload

查看 Nginx 进程

ps aux | grep nginx

查看端口占用

netstat -ntlp

参考文档

https://www.weixueyuan.net/a/751.html

https://www.cnblogs.com/carrothhh/p/13377135.html

https://blog.csdn.net/Y_Yoooo/article/details/124753388

https://blog.csdn.net/weixin_30795127/article/details/97385091#proxy_cache

https://blog.csdn.net/weixin_44623055/article/details/124715177

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值