nginx是一个轻量级的web服务器,也是一个轻量级反向代理服务器。我们主要使用nginx的反向代理功能。特点有:高稳定、高性能、资源占用少、模块化丰富。nginx的进程结构:启动nginx的时候,会启动一个masert进程,这个进程不处理客户端的任何请求,主要是用来产生worker进程,一个worker来处理一个request,互不影响。据说单台nginx可以做到10万并发以上。
centos因为有yum安装,所以安装nginx非常简便。首先安装一下yum源,再进行安装就可以了:yum -y install epel-release && yum -y install nginx
。我们可以输入命令看下nginx的配置文件在哪:
[root@cs ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
这个命令主要用于测试配置文件有没有错误,也可以看到配置文件的路径。我们可以看下nginx的路径、启动nginx(yum安装变量会直接配好,所以直接输入就好了):
[root@cs ~]# find / -name "nginx"
/usr/lib64/perl5/vendor_perl/auto/nginx
/usr/lib64/nginx
/usr/sbin/nginx
/usr/share/nginx
/etc/logrotate.d/nginx
/etc/nginx
/var/lib/nginx
/var/log/nginx
[root@cs sbin]# nginx
然后就可以输入网址看到nginx的页面了。其他命令:nginx -s stop
停止、nginx -c
指定配置文件启动。可以看一下配置文件内容vi /etc/nginx/nginx.cnf
(也是我们优化需要更改的文件):
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx; #用户、谁在使用nginx
worker_processes auto; #工作的进程数,auto表示自动选择,如果cpu多的话,一般为cpu的倍数,
error_log /var/log/nginx/error.log; #nginx错误日志路径
pid /run/nginx.pid; #nginx进程号路径
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events { #事件模块,定义每个进程可以启动多少个worker
use eroll; #事件模型,一般linux中就用eroll
worker_connections 1024; #可以根据操作系统的最大打开数来设置,用 ulimit -n 来查看,但是理论上,没必要设置这么大
}
http { #主要是协议级别的
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #定义日志main的结构,记录哪些东西,可以自己调整,前提当然是会!
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #使用main日志格式,设置路径。
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types; #包含这个配置文件,所以也可以在这个指定的文件中配置
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server { #服务器设置,服务级别
listen 80 default_server; #监听那个端口
listen [::]:80 default_server;
server_name _; #服务名称
root /usr/share/nginx/html; #做动静分离时,可以指定去哪找资源
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { #请求级别的,做反向代理时的模块
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
如果我们想在一个服务器中配置多个项目,然后根据不同的域名来访问不同的项目,也可以在nginx中配置。只需在http模块下增加:
server
{
listen 80;
server_name www.aizhel.com aizhel.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8180;
}
access_log /var/log/nginx/aizhel_access.log;
}
server
{
listen 80;
server_name www.chenshuai.top chenshuai.top;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8280;
}
access_log /var/log/nginx/chenshuai_access.log;
}
server
{
listen 80;
server_name www.itshuai.com itshuai.com www.itshuai.cn itshuai.cn;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8380;
}
access_log /var/log/nginx/itshuai_access.log;
}
若果我们想在nginx中配置根据不同后缀来访问不同的项目,和上面的配置差不多:
server {
listen 80; #监听的端口
server_name localhost; #可以是域名
location /asso {
proxy_pass http://localhost:8081/asso;
}
location /usso {
proxy_pass http://localhost:8080/usso;
}
如果我们需要一些功能需要在nginx.conf中增加配置,添加参数。对于用不到的模块,就注释或者删除。建议对配置文件备份一下,然后自己配置。具体指令可以参看nginx官网文档:http://nginx.org/en/docs/ngx_core_module.html