1. What is? Nginx?
Nginx It's a high performance one HTTP And reverse proxy server , It's also a IMAP/POP3/SMTP The server
Nginx It's lightweight Web The server / Reverse proxy server and e-mail （IMAP/POP3） proxy server
Most used web Server or proxy server , Like Taobao , Sina , Netease , Thunderbolt and others are using it
2. Why use it Nginx?
Cross platform , Simple configuration
Non blocking , High concurrency connection ： handle 2-3 10000 concurrent connections , Official monitoring can support that 5 Million concurrent
Low memory consumption ： open 10 individual nginx Cai Zhan 150M Memory Low cost ： Open Source
Built in health check function ： If one server goes down , Will have a health check-up , Requests sent again will not be sent to the down server . Re submit the request to another node .
Saving broadband ： support GZIP compress , Browser local cache can be added
High stability ： The probability of downtime is very small
master/worker structure ： One master process , Generate one or more worker process
Receiving user requests is asynchronous ： Browser sends request to nginx The server , It first receives all user requests , Send it to the back end once again web The server , Greatly reduced web Server stress
Receive on one side web Data returned by the server , Send it to the browser client
The network dependence is relatively low , as long as ping Then load balancing can be achieved
There can be more than one nginx The server
event driven ： Communication mechanism epoll Model
3. Why? Nginx The performance is so high ?
Thanks to its event handling mechanism ： Asynchronous non blocking event handling mechanism ： Used epoll Model , Provides a queue , Queuing for solution
4.Nginx How to achieve high concurrency
service nginx start after , Then enter #ps -ef|grep
nginx, You'll find out Nginx There is one master Process and several worker process , these ones here worker The process is equal , It's all by master
fork Come here . stay master inside , Establish needs first listen Of socket（listenfd）, And then again fork More than one worker process . When the user enters nginx Service time , each worker Of listenfd Become readable , And these worker Will grab a call accept_mutex Something about ,accept_mutex They are mutually exclusive , One worker Got it , other worker It's time to stop . And grab this accept_mutex Of worker It starts “ Read request – Parse request – Processing requests ”, After the data is completely returned to the client （ The target page appears on the computer screen ）, This is a complete end .
nginx This method is the bottom worker Requirements of process preemption users , At the same time “ Asynchronous non blocking ” The way , Achieve high concurrency .
5. Why not use multithreading ?
Because thread creation and context switching are very resource intensive , Threads take up a lot of memory , Context switch occupancy cpu It's also very high , use epoll The model avoids this shortcoming
6.Nginx How is a request processed ?
first ,nginx On startup , Will parse the configuration file , Get the port to listen to and ip address , And then in the nginx Of master In the process
Initialize this monitor first socket( establish socket, set up addrreuse And so on , Bind to the specified ip Address port , again listen)
And then again fork( An existing process can call fork Function to create a new process . from fork A new process created is called a child process ) Many sub processes come out
Then the child processes compete accept New connections . here , The client can send the nginx Connection initiated . When the client and nginx Shake hands three times , And nginx After establishing a connection
here , A subprocess will accept success , To get this established connection socket, Then create nginx Encapsulation of connections , Namely ngx_connection_t structural morphology
next , Set read / write event handling function and add read / write event to exchange data with client . last ,nginx Or client to actively close the connection , Here we are , One connection is dead
7. Forward agent
One is located on the client and the original server (origin server) Between servers , To get content from the original server , The client sends a request to the agent and specifies the destination ( Original server )
The proxy then forwards the request to the original server and returns the obtained content to the client . The client can only use forward proxy
Forward agency summary in one sentence ： The proxy is the client
8. Reverse proxy
Reverse proxy （Reverse Proxy） Mode means to accept by proxy server internet Connection request on , Then request , To servers on the internal network
And returns the results from the server to the internet Client requesting connection on , At this time, the proxy server is represented as a reverse proxy server
Reverse agency summary in one sentence ： The proxy is the server
9. dynamic resource , Static resource separation
dynamic resource , Static resource separation is to make the dynamic web pages in dynamic websites distinguish the unchanging resources and the frequently changing resources according to certain rules , After the separation of dynamic and static resources
We can cache static resources according to their characteristics , This is the core idea of website static processing
dynamic resource , Static resource separation can be summarized as follows ： Separation of dynamic file and static file
10. Why move , Static separation ?
In our software development , Some requests need to be processed in the background （ as ：.jsp,.do wait ）, Some requests do not need to be processed in the background （ as ：css,html,jpg,js And so on ）
These files that do not require background processing are called static files , Otherwise, the dynamic file . So we ignore static files in the background . It will be said that if I ignore static files in the background, it will be over
Of course, it can , However, the number of requests in the background has increased significantly . When we need the response speed of resources , We should use this strategy to solve this problem
Here we put static resources into nginx in , Forward dynamic resources to tomcat Server
11. load balancing
Load balancing is that the proxy server distributes the received requests to each server in a balanced manner
Load balancing mainly solves the problem of network congestion , Improve server response speed , Services provided nearby , Achieve better access quality , Reduce the pressure of background server concurrency
Welcome to do it Java The exchange group made up of friends （785779447） Get free Java Structure learning materials （ It has high availability , High concurrency , High performance and distributed ,Jvm performance tuning ,Spring Source code ,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx And other knowledge points ）
It covers all aspects of the Internet , During this period, we encountered various problems in various scenarios of various products , It is worth learning from , Expand their technical breadth and knowledge .